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.我有什么想法我做错了吗?
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)
最后,(现在我开始讨论主题)通常认为最好的做法是使用自由函数而不是成员,就像二元运算符这样的东西.