抽象基类的派生类未正确覆盖基纯虚拟方法
Derived Class of Abstract Base Class does not correctly override Base pure virtual method
所以我正在尝试创建一个抽象基类的派生类,但纯虚拟方法不能使用派生类声明。
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;
}
我希望 Doo
中的 add 方法声明能够工作,因为Doo
是 Foo
的子类,但 g++ 说我没有覆盖Foo's
add 方法。我假设这很简单,我如何声明Doo's
添加方法。
签名不匹配,因此您不会覆盖任何内容。查找 override
关键字,让编译器帮助您诊断此类错误。
add(const Foo<T>* rhs)
与
add(const Doo<T>* rhs)
他们采取不同的论点。
它们还返回不同的类型。但是返回类型在重载解析或重写时无关紧要,但这通常也表明您缺少标记(您想要覆盖的内容(,因为通常您希望重写函数返回与它覆盖的内容相同的类型。
通过使用具有不同签名的函数,您隐藏了该函数,而不是覆盖它。
防止这些错误的最佳方法是每次打算覆盖虚拟函数时override
如下关键字(在您的示例中(:
Doo<T>* add(const Doo<T>* rhs) override
如果函数实际上没有覆盖,编译器将发出错误。
相关文章:
- 确保模拟的 GTest 方法覆盖虚拟方法
- 为什么我无法覆盖虚拟功能?
- 使用不同的返回类型覆盖虚拟函数
- C++ 使用不同的返回类型覆盖虚拟函数
- 通过覆盖虚拟函数来获取'unresolved external symbol'
- 部分覆盖虚拟函数
- 用现有函数覆盖虚拟函数
- 覆盖虚拟函数 - 派生类具有不同的参数
- 在模板类中覆盖虚拟函数的错误
- 覆盖虚拟函数时出错C++
- C :从模板类得出的覆盖虚拟纯函数
- 覆盖虚拟函数不起作用,头文件和C ++文件
- 方法是否覆盖虚拟
- 如何正确覆盖虚拟方法以添加功能
- 为什么子类覆盖虚拟函数不能更改父类的默认函数参数
- 为什么C++显式实例化的模板方法不能覆盖虚拟方法?
- 如何用非虚拟函数覆盖虚拟函数
- 非覆盖虚拟函数的绑定类型
- 我可以用纯虚拟函数覆盖虚拟函数吗?
- 使用更多参数覆盖虚拟函数