一、C++中继承方式有public、protected、private三种。
先说明一下public、protected、private这三种成员的访问属性的控制,注意这个我还没有涉及到继承方式哦(^ _ ^).
1.public成员在类内、子类中、外部都可以随意访问。
2.protected成员在类内和派生中都可以访问,即只能被类内或者派生类访问,而不能被派生类派生的对象所访问,派生的对象属于外部,而外部则不可以访问。
3.private成员只能在类中才能访问,外部不能访问。
总结如下:
访控属性 基类 子类 外部 友元
public 公有 OK OK OK OK
protected 保护 OK OK NO OK
private 私有 OK NO NO OK
二、类的继承方式对访控属性的影响
1.记住这句话:当试图通过一个子类对象访问该对象从其基类继承的成员时,才需要考虑继承方式对访控属性的影响。
A->B->C(A派生B,B派生C)
1)B中访问A的成员:不需要考虑B从A的继承方式
2)C中访问A的成员:需要考虑B从A的继承方式
3)如在外部创建对象B b;通过b访问A的成员:需要考虑B从A的继承方式
2.继承方式对访控属性的影响
主要影响如下:
1)公有继承对访控属性没有影响
2)保护继承基类的public部分变为protected,protected和private部分不变
3)私有继承基类的public、protected和private部分都变为private
总结如下:
基类中的 公有子类继承方式 保护子类继承方式 私有子类继承方式
----------------------------------------------------------------------------------------------
公有成员 公有成员 保护成员 私有成员
保护成员 保护成员 保护成员 私有成员
私有成员 私有成员 私有成员 私有成员
三、总结
私有继承仅仅将基类作为子类的实现工具,同时又不希望基类的公有接口通过子类而扩散。
保护继承允许基类的公有接口在子类中使用,但是却不能对外部扩散。