[c++] 多重继承、虚继承、菱形继承

多重继承的特性和使用和单继承没区别。按照单继承来使用即可。

多重继承可能会引入一个“菱形继承的问题”,这个问题其实并不算问题,因为它合情合理,即多个基类
拥有一个共同的基类,那么在构造的时候,由于构造的递归特性,就会出现共同基类出现两份实例的
情况,而且如果针对性修改,那么如果不在访问共同基类的时候先指定直接基类名称空间,则会出现
访问的二义性。
同时,菱形继承还会引入一个共同基类实例的内存开销。

不过,有些场景下,可能还确实需要两份共同基类。这样看,菱形继承 只是一个 “合理”的现象,而不是
问题,只要当我们不需要两份共同基类时,它才是“问题”。

解决菱形继承的方法:使用虚继承,即找到共同基类的继承处,在: 后面 和 继承权限限制 中间加上
virtual。

class A:public B,public C{

}

class B:virtual public D{

}

class C:virtual public D{

}

虚继承告诉编译器,在构造的时候,为其他类只创建一份自己,类似于类的static成员。

注意:

正常的构造调用顺序:从最底层基类开始,直至最高层子类
正常的析构调用顺序:与上相反

包含虚继承的继承体系构造调用顺序与上略有不同,编译器会先轮询一边继承体系,如果存在虚继承,
那么构造时会优先构造虚继承的那个节点,接着按照正常顺序构造。析构也是如此,都是虚继承的节点
优先处理。

猜你喜欢

转载自blog.csdn.net/ykun089/article/details/106986253