Const和非const版本和继承

时间:2017-05-23 13:31:13

标签: c++ inheritance const 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; }
};

我希望能够做到这样的事情:

Derived d;
d() = 1;

但是编译器抱怨说表达式不可分配。但是,这样做

Derived d;
d.Base::operator()() = 1;

正常工作。这是为什么 ?编译器是否应该能够在基类中查找成员函数?是否存在避免重写非const方法的解决方案是派生类?

1 个答案:

答案 0 :(得分:4)

  

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

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

class Derived : public Base
{
    public:
        using Base::operator();
        int operator()() const { return value; }
};