c++ 继承时产生的二义性问题与虚基类

问题现象一:

c++ 继承时产生的二义性问题与虚基类

c++ 继承时产生的二义性问题与虚基类

问题现象二:

c++ 继承时产生的二义性问题与虚基类

但是上面这种无二义性的解决办法会产生很多冗余,也会浪费空间。

c++ 继承时产生的二义性问题与虚基类

问题二解决方案的例子:

c++ 继承时产生的二义性问题与虚基类

在base1和base2中就只存放了指向base0的指针,所以在derived对象中,就只存在一份base0了。

c++ 继承时产生的二义性问题与虚基类

c++ 继承时产生的二义性问题与虚基类

 

这个时候的构造函数有点特殊:

c++ 继承时产生的二义性问题与虚基类

示例:

c++ 继承时产生的二义性问题与虚基类

c++ 继承时产生的二义性问题与虚基类

虽然 base1,base2的构造函数中都为base0传递了参数,但是只有最远的派生类derived 构造函数中的那个base0(var) 会真的调用base0的构造函数。