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
};
我想我没有得到关于虚拟行为的非常基本的概念。 我想创建以下层次结构:
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
};