Rationalクラスの演算子-=のオーバーロードを定義しました。
rational.hh:
class Rational {
public:
Rational(int numerator, int denominator) : numerator(numerator), denominator(denominator)
{ }
int getNumerator() const;
int getDenominator() const;
Rational& operator-=(const Rational& bar);
private:
int numerator, denominator;
rational.cc:
Rational& Rational::operator-=(const Rational& subtracted) {
Rational result((*this).getNumerator()*subtracted.getDenominator() - (*this).getDenominator()*subtracted.getNumerator(), (*this).getDenominator()*subtracted.getDenominator());
return *this;
}
コードは警告なしにコンパイルされますが、このコードはrの値を変更しません。
Rational r(1, 1);
r -= Rational(1, 2);
なぜ何かアイデアはありますか?