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成员。

 

posted @ 2012-11-16 01:17  hilbertan  阅读(216)  评论(0编辑  收藏  举报