簡體   English   中英

+ = C ++中的重載問題

[英]+= 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM