为什么重载赋值运算符没有得到继承? [重复](Why does an overloaded as

2019-08-17 05:42发布

这个问题已经在这里有一个答案:

  • 麻烦操作者的继承=在C ++ 5个答案
  • 运算符=和未用C继承功能++? 3个回答

为什么这样的代码:

class X {
public:
    X& operator=(int p) {
        return *this;
    }
    X& operator+(int p) {
        return *this;
    }
};

class Y : public X { };

int main() {
    X x;
    Y y;
    x + 2;
    y + 3;
    x = 2;
    y = 3;
}

给错误:

prog.cpp: In function ‘int main()’:
prog.cpp:14:9: error: no match for ‘operator=’ in ‘y = 3’
prog.cpp:14:9: note: candidates are:
prog.cpp:8:7: note: Y& Y::operator=(const Y&)
prog.cpp:8:7: note:   no known conversion for argument 1 from ‘int’ to ‘const Y&’
prog.cpp:8:7: note: Y& Y::operator=(Y&&)
prog.cpp:8:7: note:   no known conversion for argument 1 from ‘int’ to ‘Y&&’

为什么+运营商继承,但=运营商呢?

Answer 1:

Y包含隐含声明的赋值操作符,它隐藏在基类中声明的操作。 通常,在一个派生类声明一个函数隐藏在碱类中声明的相同名称的任何函数。

如果你想既提供Y ,使用using声明:

class Y : public X {
public:
    using X::operator=;
};


Answer 2:

你就忘记了方法,如果他们没有宣布编译器自动生成。 分配是在他们之中。



文章来源: Why does an overloaded assignment operator not get inherited? [duplicate]