【发布时间】:2011-11-05 09:41:47
【问题描述】:
给定以下代码(没有虚拟继承):
class A
{
public:
virtual void f() = 0;
};
class B : public A
{
public:
virtual void f() {}
};
class C : public A
{
public:
virtual void f() {}
};
class D : public B, public C
{
/* some code */
};
int main()
{
D d;
return 0;
}
代码编译。
另一方面,这里:
class A
{
public:
virtual void f() = 0;
};
class B : virtual public A
{
virtual void f() {}
};
class C : virtual public A
{
virtual void f() {}
};
class D : public B, public C
{
/* some code */
};
int main()
{
D d;
return 0;
}
编译器出现编译错误:
no unique final overrider for 'virtual void A::f()' in 'D' .
为什么第二个代码不一样?
【问题讨论】:
-
D是否实现/覆盖virtual void f()? -
虚拟继承并不是解决重复继承问题的灵丹妙药。它是与非虚拟继承不同的工具,很像虚拟与非虚拟函数:它们具有不同的语义,适用于不同的问题。
标签: c++ overriding virtual multiple-inheritance virtual-inheritance