读书笔记--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). 虚基类的初始化(即构造函数书写问题):由于派生类中只有一份数据成员,所以现在这份基类数据成员必须由派生类来直接给出。所以,这里,在最后的派生类中,不仅要负责对其直接积累进行初始化,还要负责对虚基类初始化。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值