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