为什么无法从派生类对象访问父类的赋值运算符

doc*_*doc 6 c++ inheritance assignment-operator

例:

class C
{
  public:
    void operator =(int i) {}
};

class SubC : public C
{
};
Run Code Online (Sandbox Code Playgroud)

以下是编译错误:

SubC subC;
subC = 0;
Run Code Online (Sandbox Code Playgroud)

"'subC = 0'中的'operator ='不匹配"

一些消息来源声明这是因为赋值运算符不是继承的.但是,这不仅仅是因为默认构造的复制分配SubC掩盖了它们吗?

Vau*_*ato 11

复制赋值运算符在派生类中自动生成.由于C++的常规名称隐藏规则,这会导致基类的赋值运算符被隐藏.您可以通过"using"指令取消隐藏基类中的名称.例如:

class C
{
  public:
    void operator =(int i) {}
};

class SubC : public C
{
  public:
    using C::operator=;
};
Run Code Online (Sandbox Code Playgroud)