派生类继承了基类中除了构造函数和析构函数之外的所有成员,派生类不能选择继承一部分而舍弃另外一部分成员。对于从基类继承而来的在派生类中没有用的成员,可以通过指定继承方式,使这些成员在派生类中成为不可访问的,从而减少数据冗余和增加数据的安全性。
不同的继承方式决定的不同访问控制权限体现在:
(1)派生类的成员函数对所继承的基类成员的访问控制
(2)类外面通过派生类对象对其所继承基类成员的访问控制
综述:
首先,不同的继承方式,不影响派生类的成员函数对从基类继承的成员访问,即派生类的成员函数不能直接访问基类私有成员,可以直接访问基类的保护成员和公有成员。
其次,不同的继承方式,对类外的其他函数通过派生类对象访问从基类继承的公有成员,有不同的影响:只有公有继承方式的时候,通过派生对象可以访问从基类继承的公有成员,其他继承方式下,不能访问从基类继承的任何成员。
最后,在不同的继承方式下面,基类成员被继承到派生类后,访问的属性有不同的变化。具体如下表:
按照上面的解释:
B从A类中以哪种方式继承下来,对于C(想要继承B)的类来说,是有些影响的。例如B以private的方式继承A,那么就算C以public的继承B,原先A中的基类成员变成了private,那岂不是C就不能访问了?归根就是说对父类在间接子类中的访问权限问题。
这个问题在下面的实例得到验证,也就说两层的继承看不到区别,但是在三层以及更多层的继承中继承方式对结果影响就大了
实例:
需要说明:
第一点:三层继承结构private就不用说了,在base01以private继承了base,其里面的public和protected的成员都变成了private,没那么在deriver的成员函数就不用想再去访问基类base中的原本是protected和public的成员了。记住继承类的成员函数只能访问上一级父类(不是所有父类,要看之前的继承方式是否改变了之前父类访问属性)的保护成员和公有成员
第二点:
像之前学习过的知识,想要访问某个类的private成员,只有两种方法,第一种就是成为其的友元函数;第二种方法,就是期望其类本身开放了private的接口,常见的就是set和get函数接口