天天看点

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

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

多重继承可能会引入一个“菱形继承的问题”,这个问题其实并不算问题,因为它合情合理,即多个基类

拥有一个共同的基类,那么在构造的时候,由于构造的递归特性,就会出现共同基类出现两份实例的

情况,而且如果针对性修改,那么如果不在访问共同基类的时候先指定直接基类名称空间,则会出现

访问的二义性。

同时,菱形继承还会引入一个共同基类实例的内存开销。

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

问题,只要当我们不需要两份共同基类时,它才是“问题”。

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

virtual。

class A:public B,public C{

}

class B:virtual public D{

}

class C:virtual public D{

}      

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

注意: