虚拟inheritance

什么是“虚拟”inheritance的含义?

我看到下面的代码,并且在下面的上下文中不理解关键字virtual的含义:

 class A {}; class B : public virtual A; 

虚拟inheritance被用来解决DDD问题(Diableful Diamond on Derivation)。

看看下面的例子,你有两个从同一个基类inheritance的类:

 class Base { public: virtual void Ambig(); }; 

 class C : public Base { public: //... }; class D : public Base { public: //... }; 

现在,您要创build一个inheritance自C和D类的新类(它们都inheritance了Base :: Ambig()函数):

 class Wrong : public C, public D { public: ... }; 

当你定义上面的“错误”类时,你实际上创build了DDD(Diamond Derivation问题),因为你不能调用:

 Wrong wrong; wrong.Ambig(); 

这是一个模糊的函数,因为它被定义了两次:

 Wrong::C::Base::Ambig() 

和:

 Wrong::D::Base::Ambig() 

为了防止这种问题,您应该使用虚拟inheritance,这将知道指向正确的Ambig()函数。

所以 – 定义:

 class C : public virtual Base class D : public virtual Base class Right : public C, public D