首页 > 解决方案 > 抽象基类的派生类未正确覆盖基纯虚方法

问题描述

所以我试图创建一个抽象基类的派生类,但是不能使用派生类声明纯虚方法。

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'sadd 方法。我假设这对于我声明Doo'sadd 方法的方式很简单。

标签: c++inheritanceabstract-class

解决方案


签名不匹配,因此您不会覆盖任何内容。查找override关键字以让您的编译器帮助您诊断此类错误。

add(const Foo<T>* rhs)

不一样

add(const Doo<T>* rhs)

他们采取不同的论点。

它们还返回不同的类型。但是返回类型在重载决议或覆盖时并不重要,但这通常也表明您缺少标记(您想要覆盖的标记),因为通常您希望覆盖函数返回与其覆盖的相同类型.


推荐阅读