gpt4 book ai didi

c++ - 用定义的运算符添加对象无法正常工作

转载 作者:行者123 更新时间:2023-12-02 10:00:06 28 4
gpt4 key购买 nike

输出等于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;
}

关于c++ - 用定义的运算符添加对象无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63053240/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com