本文主要是介绍读书笔记--C++程序设计(第2版)--11.6多重继承(与虚基类),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
多重继承(与虚基类)
1. 多重继承说明
也就是,一个派生类有两个或多个基类(派生类继承了两个或者多个基类的属性)。
2. 多重继承的书写形式为
举例形式说明:
如果已经声明了类A,类B,和类C,可以声明多重继承的派生类D
class D:public A,private B,protected C
{类D中新增加的成员}
注意:在多重继承时,要分别写出各个基类的继承方式。
3. 多重继承的构造函数形式为
派生类构造函数名(总参数表):基类1构造函数(参数表),基类2构造函数(参数表),基类3构造函数(参数表),,,
{派生类中新增数据成员初始化语句}
注意:调用基类构造函数的顺序,是按照声明派生类时基类出现的顺序(即第2条时的情况来定的),并不是根据定义派生类构造函数的顺序来的。
4. 多重继承的一个很重要的问题说明---多重继承引起的二义性问题
二义性的由来:多重继承时,几个基类中可能会有相同的成员(包括数据成员和成员函数),这样如果不加以说明,则程序执行时就会有不知道要调用哪里的数据或函数,从而产生错误,即为二义性。
二义性的处理方法:
(1). 不出现相同的数据成员或成员函数,,当然这样处理方法很不现实。
(2). 用基类名来限定,,比如A::a,即代表派生类中的基类A的数据成员a。
(3).当派生类中也有跟基类相同的成员时,派生类的会将基类的成员屏蔽掉(即,派生类是有效的)。
(4). 虚基类的处理的情况(如下说明)。
==========================================================================
5. 虚基类说明
由来:多重继承时,派生类的多个基类可能是来自于同一个更高层次的基类,这是就会出现这个更高层次的基类中的成员,在派生类中出现二义性,而且派生类中将拷贝多份基类成员,这将占用过多的空间,而实际上,很多时候并不需要这么多份拷贝(有时候应该也会有需要的时候)。
虚基类作用:使得在继承共同的基类时只保留一份成员。
6. 虚基类书写形式
class 派生类名:virtual 继承方式 基类名
举例:将类A声明为虚基类,方法如下:
class A
{......}
class B : virtual public A
{......}
class C : virtual public A
{......}
注意:(1). 虚基类并不是基类的本身属性,而是在声明派生类时,指定的继承方式的声明。
(2). 为了保证虚基类在派生类时只继承一次,应当在该基类所有的直接派生类中声明为虚基类,不然仍然会出现对基类的多次继承。
(3). 虚基类的初始化(即构造函数书写问题):由于派生类中只有一份数据成员,所以现在这份基类数据成员必须由派生类来直接给出。所以,这里,在最后的派生类中,不仅要负责对其直接积累进行初始化,还要负责对虚基类初始化。
这篇关于读书笔记--C++程序设计(第2版)--11.6多重继承(与虚基类)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!