C ++重载赋值运算符在不相关的类中被调用

时间:2014-02-11 09:59:49

标签: c++ operator-overloading

在下面的代码中,我无法理解为什么要为类B的赋值调用类A的重载赋值运算符,因为这些类不相关(继承)?

class A {
public:
    void operator=(const A& rhs) {
        if (this == &rhs) cout << "self-assigned";
    }
};
class B {
    A a; // should not be a pointer member, (i.e) A* a
}; 
int main() {
    B b;
    b = b;  // Ans: self-assigned
}

此外,如果在B类中实现了任何自定义赋值运算符,那么它将被优先于A类调用。

2 个答案:

答案 0 :(得分:2)

如果您没有提供赋值运算符,则编译器会自动生成一个在每个类成员上执行赋值的运算符。在此自动生成的赋值运算符中,将调用A的赋值运算符的重载。

答案 1 :(得分:2)

要为您声明的 a 成员变量调用它。您正在复制对象(进入同一对象),因此每个成员变量都由默认赋值运算符复制。

此运算符(编译器生成的)复制每个成员(递归)。它的工作原理是在实例中的每个字段上调用复制构造函数,并在创建副本的对象中使用相应的字段。

另请查看http://en.cppreference.com/w/cpp/language/as_operator