“虚拟”继承是什么意思?
我看到了下面的代码,没明白关键字的意思virtual
在以下情况下:
class A {};
class B : public virtual A;
虚拟继承用于解决 DDD 问题(Dreadful Diamond on Derivation)。
看下面的示例,其中有两个继承自同一基类的类:
class Base
{
public:
virtual void Ambig();
};
class C : public Base
{
public:
//...
};
class D : public Base
{
public:
//...
};
现在,您想要创建一个继承自 C 类和 D 类的新类(它们都继承了 Base::Ambig() 函数):
class Wrong : public C, public D
{
public:
...
};
当您定义上面的“错误”类时,您实际上创建了 DDD(钻石派生问题),因为您无法调用:
Wrong wrong;
wrong.Ambig();
这是一个不明确的函数,因为它定义了两次:
Wrong::C::Base::Ambig()
And:
Wrong::D::Base::Ambig()
为了防止这种问题,你应该使用虚拟继承,它会知道引用正确的Ambig()
功能。
所以 - 定义:
class C : public virtual Base
class D : public virtual Base
class Right : public C, public D
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)