虚拟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