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

标签 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
    }
}

错误:

Operator 'bool B::operator==(const B& rhs) const' has the 'override' specifier but does not override a base class member

最佳答案

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

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

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

关于c++ - 运算符 '...' 具有覆盖说明符但不覆盖基类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57251471/

相关文章:

C++ 抽象基类构造函数/析构函数 - 一般正确性

c++ - 难以理解链表实现(结构部分)?

c++ - 构造许多嵌套的类成员

c++ - 是否有更优雅的方法来使用 c++17/c++20 撤消 "saved"类型的类型删除?

c++ - 在 C++ 中创建不可变对象(immutable对象)的更好方法

java - 无法使用父类中的变量?

c++ - 在 C++ 中,如何在不使用 new 且不单独声明单个元素的情况下创建 `std::initializer_list<base *>`?

c++ - 仅在使用间接时调用虚函数——经典的早期绑定(bind)问题?

python - Django:如何在 Django 中实现类的层次结构?

c++ - 不同构造函数的命令行参数