添加时会修改第一类对象

时间:2013-02-03 16:51:02

标签: c++ class

下面的代码提供了正确的加法输出,在完成后改变了第一个对象 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

谢谢:)

3 个答案:

答案 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)

您编码的运算符+实际上正在执行您对运算符+ =

的期望

operator +应该返回一个包含计算值的对象编号,而不是修改当前对象。

一些准则here

答案 2 :(得分:0)

您的operator+更改this,因为这是您定义它的方式。 或者,您可以尝试

numbers operator+( const numbers& num ) {
    numbers ret( this->x ); // constract a local copy
    ret.x += num.x;
    return ret;
}