c++ - 抽象基类的派生类未正确覆盖基纯虚方法
问题描述
所以我试图创建一个抽象基类的派生类,但是不能使用派生类声明纯虚方法。
template<class T>
class Foo
{
public:
virtual Foo<T>* add(const Foo<T>* rhs) = 0;
};
template<class T>
class Doo : public Foo<T>
{
public:
Doo<T>* add(const Doo<T>* rhs)
{
return this;
}
};
int main()
{
Doo<double> d;
return 0;
}
我希望 add 方法声明Doo
能够工作,因为Doo
它是 的子类Foo
,但是 g++ 说我没有覆盖Foo's
add 方法。我假设这对于我声明Doo's
add 方法的方式很简单。
解决方案
签名不匹配,因此您不会覆盖任何内容。查找override
关键字以让您的编译器帮助您诊断此类错误。
add(const Foo<T>* rhs)
不一样
add(const Doo<T>* rhs)
他们采取不同的论点。
它们还返回不同的类型。但是返回类型在重载决议或覆盖时并不重要,但这通常也表明您缺少标记(您想要覆盖的标记),因为通常您希望覆盖函数返回与其覆盖的相同类型.
推荐阅读
- reactjs - 根据道具更改反应组件类型
- c++ - 使用共享指针实现单例的正确方法?
- python - 发生异常:错误 mpg123_seek:无效的 RVA 模式。(代码 12)
- rust - 为什么这个 Rust 错误消息谈论数据“流动”?
- c++ - Lambda 函数给出了意外的输出
- vega-lite - 如何在 vega 公式变换中使用阶乘(!)
- javascript - 如何在 v-data-iterator 中获取自定义插槽?
- c++ - 如何正确使用 std::cin.get() 和 std::cin.peek() 的返回值?
- php - 检查用户是否经过身份验证或没有@Guest 的访客
- .net - Dockerfile复制功能与.NET发布交互