首页 > 解决方案 > 运算符“...”具有覆盖说明符但不覆盖基类成员

问题描述

我正在尝试继承一个抽象类并覆盖它的所有纯虚函数

class A
{
    virtual bool operator==(const A&) const = 0;
}

class B : A
{
    bool operator==(const B& rhs) const override
    {                                   ^^^^^^^^---problem here
        // Comparison
    }
}

错误:

运算符 'bool B::operator==(const B& rhs) const' 具有 'override' 说明符,但不覆盖基类成员

标签: c++inheritanceabstract-class

解决方案


当签名不同时,您不能覆盖virtual基类函数。中class B,必须是

bool operator==(const A&) const override;
//                         ^^ must be reference to A

请注意,测试运行时多态类型是否相等总是很奇怪;您抽象出类型,然后尝试比较两个实例-但是跨派生类型应该如何发生?尝试为operator==打算与值语义一起使用的类保留。


推荐阅读