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;
}
Наконец, (теперь я не в теме), обычно считается лучшей практикой использовать свободные функции вместо членов, где это возможно, для таких вещей, как бинарные операторы.