C ++是否调用成员对象的重载运算符?

时间:2011-06-02 10:01:17

标签: c++

 #include <stdio.h>

 class InnerOne {
     int m_iDummy;
     public:
     InnerOne(int iDummy) {
         m_iDummy=iDummy;
     }   

     InnerOne& operator=(InnerOne &obj) {
         printf("In InnerOne Operator=\n");
         m_iDummy = obj.m_iDummy;
         return *this;
     }   

 };  

 class OuterOne {
     InnerOne m_innerOne;
     public:
     OuterOne(int iVal) : m_innerOne(iVal) {
     }   

 };  

 int main() {
     OuterOne a(1);
     OuterOne b(2);
     a = b;
     return 1;
 }   

InnerOne的operator =会被调用吗? 如果是,那么如何以及为什么?

2 个答案:

答案 0 :(得分:4)

是。自动生成的OuterOne赋值运算符将调用InnerOne的赋值运算符。

答案 1 :(得分:2)

是。编译器为OuterOne生成的副本分配将调用operator=的{​​{1}}。

作为旁注,如果您将InnerOne副本分配编写为:

,则会更好
InnerOne

InnerOne& operator=(const InnerOne &obj) //^^^^ add this! 是必要的,否则您的代码将不适用于以下内容:

const

请在此处查看错误:http://www.ideone.com/YMTJS

一旦按照我的建议添加const InnerOne x(10); InnerOne y(10); y = x; //compilation error - if you use your code ,它就会编译。请参阅:http://www.ideone.com/xj06z