Const 和非常量版本以及继承

tfo*_*one 5 c++ inheritance constants c++14

在我的问题中,我将有几个类共享 getter 和 setter(在我的例子中是operator())。假设我有以下内容

class Base
{
    public:
        int& operator()() { return value; }
        int operator()() const { return value; }
    protected:
        int value;
};

class Derived : public Base
{
    public:
        int operator()() const { return value; }
};
Run Code Online (Sandbox Code Playgroud)

我期望能够做这样的事情:

Derived d;
d() = 1;
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨说该表达式不可赋值。然而,这样做

Derived d;
d.Base::operator()() = 1;
Run Code Online (Sandbox Code Playgroud)

工作正常。这是为什么 ?编译器不应该能够在基类中查找成员函数吗?有没有办法避免重写派生类的非常量方法?

Rak*_*111 5

编译器不应该能够在基类中查找成员函数吗?

是的,这是可能的,但你必须明确。为此,您可以使用using声明,将运算符引入派生类:

class Derived : public Base
{
    public:
        using Base::operator();
        int operator()() const { return value; }
};
Run Code Online (Sandbox Code Playgroud)

  • @DragonRock 它仍然调用“const”版本,因为派生类函数始终隐藏具有相同签名的基类函数。唯一的问题是你永远不会调用“const”函数,因为你的实例不是“const”。 (2认同)