C++笔记121116
继承和派生
这里主要总结一下访问控制的问题。
如果class A{};class B:A public/private/protect{};
则B是A的子类,于是对于A中的成员按照标号,B中的访问规则是
如果在A中是private,则类B中不能访问(初始化时要在初始化列表中调用A的构造函数)
如果在A中是protected或者public,则类B中可以访问
以上两点是针对在类的内部说的,与继承方式无关。
继承方式只影响派生类对象对基类成员的访问:
对于private继承,则派生类对象不能访问一切基类成员
对于protected继承,则派生类对象不能访问一切基类成员
对于public继承,派生类对象不能访问基类的private和protected成员,但可以访问public成员。
看起来好像前两种继承方式没什么区别。但是如果进一步继承就会不一样。如果B还有一个子类C,那么如果B是保护继承,则A的保护和公有成员在C中可以访问,私有继承则不行。
说白了,继承方式决定了基类的保护和公有成员在子类中的地位。而私有的永远是私有的。
所以,
一、从用户的角度看,只能访问对象的public成员,其它不能访问。
二、子类继承父类时,在类中父类的私有成员永远不能访问,其它都可以访问。
三、继承方式决定的是父类在子类中能被访问的那些成员(即父类的public和protected)在子类中的成员性质。public属于不变继承,protected继承将之全变成protected成员,private继承则将那些成员全变成子类的private成员。