簡體   English   中英

用C ++中的父類實現覆蓋純虛擬方法

[英]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.

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