c++继承方式及对基类的访问权限

  • Post author:
  • Post category:其他



公有继承,私有继承和保护继承三种。





继承方式


基类属性


public


protected


private


公有继承





public




public


protected


不可见


保护继承





protected




protected


protected


不可见


私有继承





private




private


private


不可见


1.公有继承方式



a) 基类成员对基类对象的可见性(与一般类及其对象的可见性相同):public可见,protected与private不可见。


b) 基类成员对派生类的可见性:基类的公有成员和保护成员可见,基类的私有成员不可见:基类的私有成员仍是私有的,派生类不可访问基类的私有成员。

c)  基类成员对派生类对象的可见性:基类的public是可见的,其他成员不可见。

在公有继承时,派生类的对象可以访问基类中的public,派生类的成员函数可以访问基类中的public和protected。



2.私有继承方式



a)基类成员对其对象的可见性:公有成员可见,其他成员不可见。

b)基类成员对派生类的可见性:基类的公有成员和保护成员是可见的,基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类访问;基类的私有成员是不可见的,派生类不可访问基类中的私有成员。

c)基类成员对派生类对象的可见性对派生类对象来说,基类的所有成员都是不可见的。

所以在私有继承时,基类的成员只能由直接派生类访问,而无法再继续往下继承。



3.保护继承方式



这种继承方式与私有继承方式相同,两者的区别仅在于对派生类的成员而言,基类成员对其对象的可见性与一般类及其对象的可见性相同,公有成员可见,其他成员不可见。

基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员是可见的:基类的公有成员和保护成员都作为派生类的保护成员,并且不能被这个派生类的子类访问;基类的私有成员是不可见的:派生类不可访问基类中的私有成员。

基类成员对派生类对象的可见性对派生类对象来说,基类的所有成员都是不可见的。

所以,在保护继承时,基类的成员也只能由直接派生类来访问,而无法再往下继承。

在继承中,基类的private对所有的外界都屏蔽(包括自己的派生类),基类的protected控制符对应用程序是屏蔽的,但对其派生类是可访问的。保护继承和私有继承只是在技术上讨论时有其一席之地。



版权声明:本文为koudaidai原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。