c++ - C++ - 重写虚函数和多态性
问题描述
我想我没有得到关于虚拟行为的非常基本的概念。我想创建以下层次结构:
class Parser{
virtual Parsable parse() = 0;
}
class SpecialParser : public Parser{
SpecialParsable parse() override; // implemented
}
显然SpecialParsable
class 继承自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
};
推荐阅读
- reporting-services - 如何在 SSRS 中添加基于搜索的多值参数?
- node.js - 无法从 api 端点向前端显示数据
- php - 望远镜在生产上有一些问题
- opencv - OpenCV kmeans二值图像
- python - csv 数据文件,其中写入“bytearray(...)”
- statistics - 当两个特征与目标变量同等相关时,选择哪一个
- dispatch - bixby 必须使用命名的调度短语
- elasticsearch - Elasticsearch 中的排序和偏好
- forms - 如何使用您的 Google 表单中列出的电子邮件地址重新发送电子邮件?
- python - 在进行数据帧操作之前,我可以让熊猫转换 dtypes 吗?