[英]+= Overloading in C++ problem
我正在嘗試為我的有理數類重載+ =運算符,但我不相信它會起作用,因為我總是最終得到相同的結果:
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;
}
最后,(現在我不討論話題了)通常被認為是最佳實踐,它使用自由函數而不是成員(例如二進制運算符)可以使用的成員。
您沒有更改操作員將應用於的對象。
x += 3;
應該改變x。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.