我试图为我的有理数类重载 += 运算符,但我不认为它有效,因为我总是得到相同的结果:
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;
}
内部主要
//create two rational numbers
RationalNumber a(1, 3);
a.print();
RationalNumber b(6, 7);
b.print();
//test += operator
a+=(b);
a.print();
调用a+=(b)后,a还是1/3,应该是25/21。知道我做错了什么吗?
最佳答案
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;
}
同样,operator+
应该返回一个新对象,并且几乎总是可以根据 operator+=
来实现:
RationalNumber RationalNumber::operator+(const RationalNumber &rhs){
RationalNumber tmp(*this);
tmp += rhs;
return tmp;
}
最后,(现在我要跑题了)通常认为最好的做法是使用自由函数而不是成员,因为二元运算符之类的东西可以使用。
关于c++ - += C++ 重载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754150/