输出等于20。为什么返回值不是30?
class Myclass
{
public:
int result;
Myclass() { result = 10; }
Myclass operator+ (Myclass& obj) {
Myclass tempObj;
tempObj.result += obj.result;
return tempObj;
}
};
int main()
{
Myclass obj1, obj2, obj3;
cout << (obj1 + obj2 + obj3).result;
}
如果我正确理解,则obj2 + obj3返回tempObj的结果=20。下一步是加法tempObj + obj1,这应该再次返回tempObj但结果= 30。 最佳答案
运营商内部
Myclass operator+ (Myclass& obj) {
Myclass tempObj;
tempObj.result += obj.result;
return tempObj;
}
创建了一个本地对象tempObj
,其数据成员result
始终由10
初始化。因此,尽管由子表达式创建的临时对象
obj1 + obj2
数据成员result
等于20
,但是其值将被忽略。看来你是说
Myclass operator+ (Myclass& obj) {
Myclass tempObj( *this );
tempObj.result += obj.result;
return tempObj;
}
请注意,该参数应具有恒定的引用类型,并且运算符本身应恒定。例如Myclass operator+ ( const Myclass& obj) const {
Myclass tempObj( *this );
tempObj.result += obj.result;
return tempObj;
}