#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 =会被调用吗? 如果是,那么如何以及为什么?
答案 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