[英]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::display
或using derived1::display
編寫
但是您使用的是虛函數,因此您需要添加一個最終的覆蓋函數。 可以這樣完成:
class derived2 : public derived, derived1 {
public:
void display() override {
derived::display(); // or derived1::display();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.