C++中公有继承,私有继承,保护继承的区别
一个子类继承父类时,可按照public、private和protected方式继承父类,每种继承方式的区别如下:
1) public继承方式
- 基类中所有public成员在派生类中为public属性;
- 基类中所有protected成员在派生类中为protected属性;
- 基类中所有private成员在派生类中不可访问。
2) protected继承方式
- 基类中的所有public成员在派生类中为protected属性;
- 基类中的所有protected成员在派生类中为protected属性;
- 基类中的所有private成员在派生类中仍然不可访问。
3) private继承方式
- 基类中的所有public成员在派生类中均为private属性;
- 基类中的所有protected成员在派生类中均为private属性;
- 基类中的所有private成员在派生类中均不可访问。
| 基类中的成员 | 在公用派生类中的访问属性 | 在私有派生类中的访问属性 | 在保护派生类中的访问属性 |
|---|---|---|---|
| 私有成员 | 不可访问 | 不可访问 | 不可访问 |
| 公用成员 | 公用 | 私有 | 保护 |
| 保护成员 | 保护 | 私有 | 保护 |
不管哪种继承方式,父类的私有成员都不可以访问,只有间接的通过公有成员才能获取到私有成员的值;
protected存在的意义是当我不想向外部暴露某个函数或者成员变量,但是我又想让派生类知道和访问这个成员,就将其用protected标志。
派生类从基类公有继承时,派生类的成员函数可以直接访问基类的公有成员,但不能访问基类的私有成员。
因此,为了便于派生类的访问,可以将基类的私有成员中需要提供给派生类访问的成员定义为保护成员。说白了就一句话,派生类可以访问protected权限的成员但是派生类的对象不能访问基类的私有成员。
转自:https://blog.csdn.net/JH19871985/article/details/8612407?locationNum=6&fps=1