+ = C++中的重载问题

use*_*514 0 c++ overloading function operator-overloading

我试图为我的有理数字类重载+ =运算符,但我不相信它有效,因为我总是得到相同的结果:

RationalNumber RationalNumber::operator+=(const RationalNumber &rhs){

   int den = denominator * rhs.denominator;

   int a = numerator * rhs.denominator;
   int b = rhs.numerator * denominator;
   int num = a+b;

   RationalNumber ratNum(num, den);
   return ratNum;
}
Run Code Online (Sandbox Code Playgroud)

里面主要

//create two rational numbers
RationalNumber a(1, 3);
a.print();

RationalNumber b(6, 7);
b.print();

//test += operator
a+=(b);
a.print();
Run Code Online (Sandbox Code Playgroud)

在调用+ =(b)之后,a仍然是1/3,它应该是25/21.我有什么想法我做错了吗?

Eva*_*ran 7

operator+=应该修改对象本身并返回引用.您正在创建一个新对象并返回该对象.这样的东西可能有效(未经测试的代码):

RationalNumber &RationalNumber::operator+=(const RationalNumber &rhs){

   int den = denominator * rhs.denominator;

   int a = numerator * rhs.denominator;
   int b = rhs.numerator * denominator;
   int num = a+b;

   numerator = num;
   denominator = den;
   return *this;
}
Run Code Online (Sandbox Code Playgroud)

同样operator+应该返回一个新对象,几乎总是可以用以下方式实现operator+=:

RationalNumber RationalNumber::operator+(const RationalNumber &rhs){
    RationalNumber tmp(*this);
    tmp += rhs;
    return tmp;
}
Run Code Online (Sandbox Code Playgroud)

最后,(现在我开始讨论主题)通常认为最好的做法是使用自由函数而不是成员,就像二元运算符这样的东西.