类的public protected private 继承方式理解

本文详细阐述了面向对象编程中不同继承方式下父类成员的访问权限:public、protected和private。通过具体示例说明了这些访问修饰符如何影响子类及其实例对象对于父类成员的访问。

1  在类内部的访问权限:

public继承方式其父类的 public protect 成员和方法都可以在子类内部访问,private成员是不可见不可访问的。


protected继承方式 其父类的public protected 成员和方法都可以在子类内部访问,private成员是不可见不可访问的。


private继承方式 其父类的public protected 成员和方法都可以在子类内部访问, private成员是不可见不可访问的。


2 在类的实例对象的访问权限

public继承方式 其父类的 public成员和方法在类对象是可以访问的,其protected private成员是不可见不可访问的。


protected 继承方式 其父类的  public成员在类对象是可见但是不可访问的,其protect private成员是不可见不可访问的。


private 继承方式 其父类的 public成员在类对象是可见但是不可以访问的 其protected private成员是不可见不可访问的。


这么说可能很绕,想了半天 打个比方来理解。 

我们继承父类可以看做把父类的所有的除了private成员的代码写到子类中来, 

如果是public继承  父类代码不做变动,也就是说 父类的public代码在子类部分全部是public代码 在类的实例对象是可以任意访问的

如果是protect继承,那么父类的所有代码在子类中全部变成protect代码,那么在类的实例对象是无法访问的,但是对于原本父类的public成员是具有可视权限的

如果是private继承, 那么全部变成private代码 类对象无法访问, 同样的 原本父类的public成员是有可视权限的。

这样来理解稍微好那么一点点 ,这样理解有一个好处就是可以看到面向对象编程强大的代码重用之处。


大笑个人浅显的理解 写的不好希望指出 谢谢。委屈  欢迎大牛拍砖批评。

继承中,`public`、`protected`、`private` 访问修饰符决定了基成员在派生中的可访问性和可见性。具体规则如下: #### 公有继承(`public`) 当使用 `public` 继承时,基的 `public` 成员在派生中仍然是 `public` 的,基的 `protected` 成员在派生中仍然是 `protected` 的,而基的 `private` 成员在派生中不可直接访问。例如: ```cpp class Base { public: void publicFunc() {} protected: void protectedFunc() {} private: void privateFunc() {} }; class Derived : public Base { public: void accessBaseMembers() { publicFunc(); // 可以访问,因为在 Base 中是 public protectedFunc(); // 可以访问,因为在 Base 中是 protected // privateFunc(); // 不可访问,因为在 Base 中是 private } }; ``` #### 保护继承(`protected`) 使用 `protected` 继承时,基的 `public` 和 `protected` 成员在派生中都变为 `protected` 的,基的 `private` 成员在派生中不可直接访问。示例如下: ```cpp class Base { public: void publicFunc() {} protected: void protectedFunc() {} private: void privateFunc() {} }; class Derived : protected Base { public: void accessBaseMembers() { publicFunc(); // 可以访问,现在在 Derived 中变为 protected protectedFunc(); // 可以访问,在 Base 中就是 protected // privateFunc(); // 不可访问,因为在 Base 中是 private } }; ``` #### 私有继承(`private`) 采用 `private` 继承,基的 `public` 和 `protected` 成员在派生中都变为 `private` 的,基的 `private` 成员在派生中不可直接访问。示例代码如下: ```cpp class Base { public: void publicFunc() {} protected: void protectedFunc() {} private: void privateFunc() {} }; class Derived : private Base { public: void accessBaseMembers() { publicFunc(); // 可以访问,现在在 Derived 中变为 private protectedFunc(); // 可以访问,现在在 Derived 中变为 private // privateFunc(); // 不可访问,因为在 Base 中是 private } }; ``` 总结来说,`public` 继承保持成员的访问级别不变,`protected` 继承将基的 `public` 和 `protected` 成员变为 `protected`,`private` 继承将基的 `public` 和 `protected` 成员变为 `private`。基的 `private` 成员在任何继承方式下,派生都不能直接访问 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值