【发布时间】:2012-11-14 01:32:00
【问题描述】:
我有以下代码:
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++ 中有一些标准的方法可以摆脱这个问题(告诉编译器应该使用哪个接口副本)我只是不记得它是什么。
【问题讨论】:
-
是不是没有虚拟继承,你的
Child类中会有两个不同的虚拟method()函数? -
我相信,现在就尝试。
-
为什么要同时继承
Base和Parent? -
我想我的部分问题是:您是否有意不在这个菱形层次结构中使用虚拟继承?
-
@0A0D 公平的问题,但这会让我们偏离主题,假设我需要这样做。
标签: c++ polymorphism virtual multiple-inheritance abstract