运算符'...'具有覆盖说明符,但不覆盖基类成员

时间:2019-07-29 10:04:02

标签: c++ inheritance abstract-class

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

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'说明符,但不覆盖基类成员

1 个答案:

答案 0 :(得分:2)

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

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

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