在派生类开头的基类列表(或者说派生列表)中,我们会在派生类继承的基类前加上一个访问控制符,这个访问控制符可以进一步限制基类成员在派生类中呈现的访问权限。表8.8.1总结了基类的成员访问级别在经过派生时,被访问控制符进一步限制后的结果。
表8.8.1 修饰基类的访问控制符的效果
在公有继承(Public Inheritance)的情况下,基类成员的访问级别会被原封不动地照搬。
在私有继承(Private Inheritance)的情况下,基类成员的访问级别会全部变成Private。
在保护继承(Protected Inheritance)的情况下,基类成员中Public的成员将会变成Protected,而其余不变。
我们可以把这样的结果简单地看作是基类访问级别与成员访问级别取最小值的结果。由于公有继承的情况非常直观,接下来我们就分别用两个示例来展示私有继承和保护继承的行为。
动手写8.8.2
动手写8.8.2展示了私有继承对派生类的派生类所带来的影响。编译该程序时会报出如图8.8.2所示的错误:
(www.xing528.com)
图8.8.2 私有继承
派生类Derived采用了私有继承,所以所有基类成员在Derived中都变成了私有成员。因为c在基类中已经是私有成员了,所以在Derived中不能被访问;而a和b相当于变成了在Derived中声明的私有变量,所以能被Derived访问,却不能被它的派生类Derived1访问。这里的概念有些复杂,但我们只要记住一点,那就是私有继承和保护继承不会影响基类,只会影响派生类中的基类成员。对于b来说,如果Derived是公有继承的,那么b会保持protected的特性,而在Derived1中也能被访问;但现在私有继承在Derived的这一继承层次改变了b的访问权限,从而使b在Derived之下的继承层次中一律拥有private的访问权限。
接下来我们再看保护继承:
动手写8.8.3
动手写8.8.3展示了保护继承对派生类的派生类所带来的影响。编译该程序时会报出如图8.8.3所示的错误:
图8.8.3 保护继承
保护继承将基类的public成员转化为派生类中的protected成员,所以在Derived1中可以访问a,但是在外界的main()函数中却不行。而b得以继续保持protected的访问权限,在Derived1中可以被访问。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。