下面的代码提供了正确的加法输出,在完成后改变了第一个对象 b 的 x 值。
class numbers{
public:
int x;
numbers(int i1){
x = i1;
}
numbers operator+ (numbers num){
x = x + num.x;
return(x);
}
};
int main(){
numbers a (2);
numbers b (3);
numbers c (5);
numbers d (7);
cout << a.x << b.x << c.x << d.x << endl; // returns 2357
numbers final (100); //this value won't be shown
final = a+b+c+d;
cout << a.x << b.x << c.x << d.x << endl; // returns 5357
cout << final.x; //returns 17 (2+3+5+7)
system("pause");
}
问题是,这个加法课程究竟如何运作?我的意思是,为什么 x 来自对象 a ? 我只会修改最终对象的 x 。
谢谢:)
答案 0 :(得分:2)
对operator +的调用就像任何其他成员函数调用一样。 a + b
转换为a.operator+(b)
。因此,在这种情况下,行x = x + num.x;
实际上是分配给a.x
。为了达到你想要的目的,你需要用新值填充一个新数字,即
numbers operator+ (numbers num) const {
return numbers(x + num.x)
}
还要注意const - 当你犯了这个错误时会给你一个编译错误。
答案 1 :(得分:2)
答案 2 :(得分:0)
您的operator+
更改this
,因为这是您定义它的方式。
或者,您可以尝试
numbers operator+( const numbers& num ) {
numbers ret( this->x ); // constract a local copy
ret.x += num.x;
return ret;
}