在我的问题中,我将有一些将分享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方法的解决方案是派生类?
答案 0 :(得分:4)
编译器是否应该能够在基类中查找成员函数?
是的,这是可能的,但你必须明确。为此,您可以使用using
声明,该声明将运算符引入派生类:
class Derived : public Base
{
public:
using Base::operator();
int operator()() const { return value; }
};