C++ - 覆盖虚函数和多态性

C++ - Override virtual function and polymorphism

我想我没有得到关于虚拟行为的非常基本的概念。 我想创建以下层次结构:

    class Parser{

       virtual Parsable parse() = 0;
    }

    class SpecialParser : public Parser{

       SpecialParsable parse() override; // implemented

    }

显然 SpecialParsable class 继承自 Parsable

这个 returns 我是一个错误,因为签名不同。 (SpecialParser::parse() returns SpecialParsable instead of Parsable).

现在,Parsable 显然是一个抽象的 class,我不想让它成为可能被实例化。我不明白为什么不能这样做,因为 SpecialParsable 只是 Parsable 的特定实现。

提前致谢,

C++ 中的动态多态性依赖于间接。如果您 return 一个指针(或引用),您的示例将按预期编译和运行。这称为 "covariant return type":

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

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

live example on godbolt.org