为什么这个'a'= 2,而不是7?

时间:2019-05-21 23:56:06

标签: c++

我正在重载运算符'/'。当我将对象'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();
}

2 个答案:

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