在C++中有3种继承方式,分别是public继承(公有继承),protected继承(保护继承),private继承(私有继承)。最常用的还是public继承。系统默认是private继承。
1.公有继承
当派生类的继承方式是public时,基类的public和protected成员的访问属性在派生类中保持不变,而基类的private成员不可访问,即基类的public和protected成员分别作为派生类的public和protected成员,派生类的其他成员可以直接访问它们。
【例5.1】有如下类定义:
其中,类X 有三个成员,分别为public、protected和private属性。类Y 是派生类,由X共有派生得到。则类X 中的public、protected属性成员a、b继承到了类Y 中,且保持原属性,在类中可以被类Y 的成员函数直接使用。通过类Y 的对象y可以直接访问public成员a,不能访问protected成员b。
2.保护继承
当派生类的继承方式是protected时,基类的public和protected成员同时作为派生类的protected成员,基类的private成员不可访问,派生类的其他成员可以直接访问它们。
【例5.2】有如下类定义:
程序编译报错,信息如图5-2所示:
图5-2 编译报错(www.daowen.com)
其中,类X 有三个成员,分别为public、protected和private属性。类Y 是派生类,由X保护派生得到。则类X 中的public、protected属性成员a、b继承到了类Y 中,都变为protected属性,在类中可以被类Y 的成员函数直接使用。通过类Y 的对象y不可以直接访问protected成员a和b。
3.私有继承
当派生类的继承方式是private时,基类的public和protected成员分别作为派生类的private成员,除了基类的private成员不可访问,派生类的其他成员可以直接访问它们。
【例5.3】有如下类定义:
程序编译报错,信息如图5-3所示:
图5-3 编译报错
其中,类X 有三个成员,分别为public、protected和private属性。类Y 是派生类,由X保护派生得到。则类X 中的public、protected 属性成员a、b 继承到了类Y 中,都变为private属性,在类中可以被类Y 的成员函数直接使用。通过类Y 的对象y不可以直接访问private成员a和b。
而对于类Z,通过类Y 私有派生得到,因为类Y 中只有从类X 得到的私有成员a和b,所以在类Z中已经不存在可以访问的成员了。
总结一下在C++中有3种继承方式派生类成员的访问权限可以简单地用表表示,其内容如表5-1所示。
表5-1 派生类成员的访问权限
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。