2

我有以下代码:

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

4

2 回答 2

4

你所说的叫做支配

从链接的文章:

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();
    }
};
于 2012-11-26T14:58:18.570 回答
1

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

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

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

于 2012-11-26T14:59:35.380 回答