簡體   English   中英

如何用純虛函數解決Diamond問題

[英]How to solve Diamond problem with pure virtual function

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) “如何解決這個錯誤?

您需要確定兩者中的哪一個是派生的方法,因為derived和derived1都提供了一個實現。

使用非虛擬函數,解決方案將更簡單:通過簡單地using derived::displayusing derived1::display編寫

但是您使用的是虛函數,因此您需要添加一個最終的覆蓋函數。 可以這樣完成:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM