多重继承冲突

时间:2012-11-26 14:42:25

标签: c++ polymorphism virtual multiple-inheritance abstract

我有以下代码:

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然后我必须再次实现方法。但是它已经在Base类中定义了,我不想为每个子类重写该定义。我认为有一些标准的方法可以在c ++中解决这个问题(告诉编译器应该使用哪个接口副本)我只是不记得它是什么。

2 个答案:

答案 0 :(得分:4)

您所谈论的内容称为dominance

来自链接文章:

class Parent
{
public:
    virtual void function();
};

class Child1 : public virtual Parent
{
public:
    void function();
};

class Child2 : public virtual Parent
{
};

class Grandchild : public Child1, public Child2
{
public:
    Grandchild()
    {
        function();
    }
};

答案 1 :(得分:1)

您有一个菱形的层次结构,但没有使用虚拟继承。

因此,您最终会在method()课程中使用两个不同的虚拟Child函数。

解决这个问题的一种方法是转向使用虚拟继承。这样,您只需要一个Child::method(),并且不需要两个实现。