我有以下代码:
class Interface
{
virtual void method()=0;
};
class Base : public Interface
{
virtual void method()
{
//implementation here
}
};
class Parent: public Interface
{
};
class Child : public Base, public Parent
{
};
int main()
{
Child c;//ERROR: cannot instantiate abstract class
}
现在我知道为什么会这样了,因为我继承了Parent,所以我不得不再次实现方法。但是它已经在基类中定义了,我不想为每个子类都覆盖该定义。我认为在c++中有一些摆脱这种情况的标准方法(告诉编译器应该使用哪个接口(interface)的副本),我只是不记得它是什么。
最佳答案
您具有菱形的层次结构,但未使用虚拟继承。
结果,您最终在method()
类中使用了两个不同的虚拟Child
函数。
解决它的一种方法是转向使用虚拟继承。这样,您将只有一个Child::method()
,并且不需要两个实现。