我正在重载运算符'/'。当我将对象'a'与对象'b'相除(在main下)时,对象'a'更改为2,而不是等于7,这与之前的划分相同。这是错误吗?如果不是,为什么'a'= 2而不是7?
#include <iostream>
using namespace std;
class OO{
int x;
int y;
public:
OO(){x=y=0;}
OO(int i, int j){x=i;y=j;}
OO operator+(OO ob){
OO temp;
temp.x=x+ob.x;
return temp;
}
OO operator=(OO ob){
x=ob.x;
return *this;
}
OO operator/(OO ob){
x=x/ob.x;
return *this;
}
OO operator++(){
OO temp;
temp.x=++x;
return temp;
}
void show(){
cout<<x<<endl;
}
};
int main() {
OO a(6,2);
OO b(3,2);
b.show();
a.show();
OO c = a + a;
c.show();
++a;
a.show();
c = a / b;
a.show();//why is this 'a' = 2, instead of 7?
c.show();
c=b=a;
c.show();
}
答案 0 :(得分:2)
您正在此行上的运算符内部修改a
:
x=x/ob.x;
这会修改x。您想要的是您为operator+()
做的事情。也就是说,创建一个临时对象并返回该对象:
OO operator/(OO ob){
OO temp;
temp.x=x/ob.x;
return temp;
}
答案 1 :(得分:0)
调用c = a / b时,编译器会理解a.operator /(b)。这意味着您的实现实际上将更改a的值,结果将是a / b的除法,在这种情况下为7/3。但是7/3是整数之间的除法,因此结果将被截断,从而使您得到2。