jai*_*raj -1 c++ virtual inheritance
可能重复:
在C++中,什么是虚拟基类?
在此代码中创建DR对象时,字符串"Hello World"应打印4次,而不是仅打印3次.为什么会这样?据我所知,这是因为mid1和mid2实际上是遗传的. 有人可以解释一下,当我们真正继承一个类时会发生什么,更重要的是当它有用时为什么?
#include <iostream>
struct BS
{
BS()
{
std::cout << "Hello World" << std::endl;
}
unsigned int color;
};
struct mid1 : virtual public BS { };
struct mid2 : virtual public BS { };
struct mid3 : public BS { };
struct mid4 : public BS { };
struct DR : public mid1, public mid2,
public mid3, public mid4 { };
int main(int argc, char** argv)
{
DR d;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我们来看一个简化的例子:
class base {};
class mid1 : public base {};
class mid2 : public base {};
class derived1 : public mid1, public mid2;
class mid1a : virtual public base {};
class mid2a : virtual public base {};
class derived2 : public mid1a, public mid2a {};
Run Code Online (Sandbox Code Playgroud)
如果我们为这些绘制对象图,我们得到这样的东西:

当中间类使用虚拟继承时,派生类仅包含基类的单个实例,而不是每个中间类的单独实例.
在您的情况下,这导致基类的三个实例而不是四个.