如何用纯虚函数解决Diamond问题

时间:2018-11-16 11:19:38

标签: c++ override multiple-inheritance virtual-functions virtual-inheritance

class base
{
  public:
     virtual void display() = 0;
};

class derived : virtual public base
{
 public:
    void display()
    {
        cout << "Display of derived : " << std::endl;
    }
};

class derived1 : virtual public base
{
  public:
    void display()
    {
        cout << "Display of derived : " << std::endl;
    }
};

class derived2 : public derived, derived1
{

};

我将一个纯虚函数带入基类。我在创建派生类和派生类时使用了虚拟关键字,该类继承自我的基类,最后创建了派生类继承自派生和派生1,然后我将收到错误消息“ derived2:ambigos of base :: void(display) “如何解决此错误?

1 个答案:

答案 0 :(得分:2)

您需要确定两者中的哪一个是派生的方法,因为derived和derived1都提供了实现。

使用非虚拟功能,解决方案将更简单:只需编写using derived::displayusing derived1::display

但是您正在使用虚函数,因此您需要添加一个最终的覆盖函数。 可以这样做:

class derived2 : public derived, derived1 {
  public:
    void display() override {
      derived::display(); // or derived1::display();
    }
}