繁体   English   中英

多重继承冲突

[英]Multiple inheritance conflict

我有以下代码:

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 ++中有一些摆脱这种情况的标准方法(告诉编译器应该使用哪个接口的副本),我只是不记得它是什么。

您所说的是所谓的统治

从链接的文章中:

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();
    }
};

您具有菱形的层次结构,但未使用虚拟继承。

结果,您在Child类中得到了两个不同的virtual method()函数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM