簡體   English   中英

C ++-覆蓋虛函數和多態

[英]C++ - Override virtual function and polymorphism

我想我對虛擬行為沒有一個非常基本的概念。 我想創建以下層次結構:

    class Parser{

       virtual Parsable parse() = 0;
    }

    class SpecialParser : public Parser{

       SpecialParsable parse() override; // implemented

    }

顯然SpecialParsable類從Parsable繼承。

由於簽名不同,這會給我返回錯誤。 (SpecialParser::parse() returns SpecialParsable instead of Parsable)

現在,Parsable顯然是一個抽象類,我不想使其實例化。 我不明白為什么不應該這樣做,因為SpecialParsable只是Parsable的特定實現。

提前致謝,

C ++中的動態多態性依賴於間接性。 如果返回指針(或引用),則示例將編譯並按預期運行。 這稱為“協變量返回類型”:

class Parser {
   virtual Parsable* parse() = 0;
};

class SpecialParser : public Parser {
   SpecialParsable* parse() override; // implemented
};

Godbolt.org上的實時示例

暫無
暫無

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

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