[英]Override pure virtual method with parent class's implementation in C++
我正在使用多重繼承來提供兩個共享相似方法的不同接口。 MWE代碼如下:
struct A {
virtual void foo() = 0;
};
struct B {
virtual void foo() = 0;
};
struct C : public A {
virtual void foo() override { }
};
struct D : public B, public C {
};
int main(void) {
D x;
return 0;
}
但這在使用g++
編譯時會產生以下錯誤:
main.cpp: In function ‘int main()’:
main.cpp:17:4: error: cannot declare variable ‘x’ to be of abstract type ‘D’
D x;
^
main.cpp:13:8: note: because the following virtual functions are pure within ‘D’:
struct D : public B, public C {
^
main.cpp:6:15: note: virtual void B::foo()
virtual void foo() = 0;
^~~
我正在嘗試避免使用菱形模式(我只想提供兩個共有一些方法的接口),我寧願不必在struct D
重新實現foo()
,即使它只是調用C::foo()
。
有什么辦法解決嗎?
您將必須在某個時候實際實現B :: foo,即使它只是轉發到其他函數,也無法解決此要求。 B :: foo根本與A :: foo無關,它們與編譯器完全不同。
如果B :: foo()確實應該是A :: foo(),則似乎B應該從A派生而B根本不應該具有foo。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.