Недавно я делал класс фракции, я не получаю ожидаемых результатов при перегрузке операторов, и я не уверен, почему. Надеясь, что кто-то может помочь пролить свет. Я попытался включить только соответствующий код.Операционная перегрузка оператора присваивания в C++
const fraction fraction::operator* (fraction frac)
{
return fraction(frac.numerator * numerator, frac.denominator * denominator);
}
const fraction fraction::operator* (int num)
{
return fraction(numerator*num, denominator);
}
fraction& fraction::operator= (const fraction &rightSide)
{
return *this;
}
Эти операции являются те, которые я нашел, чтобы работать правильно (где гидроразрыва # представляет собой часть объекта):
frac1 = frac2;
frac3 = frac4 * 2;
frac5 = frac6 * frac7;
Вышеуказанные операции работают, как и ожидалось, но следующая операция оставляет frac8 так же, как он был инициализирован:
fraction frac8(4, 5); // Initializes a fraction, setting numerator = 4, denominator = 5
frac8 = frac8 * 3; // This doesn't quite work, leaving frac8 with the original numerator/denominator
Я просто не понимаю, почему вполне frac3 = frac4 * 2 работает, но frac8 = frac8 * 3 нет. Есть идеи? Использование ключевого слова const в операторе присваивания я нашел не решением.
Ну, прямо сейчас ваш оператор присваивания определен, чтобы ничего не менять ... вы, вероятно, хотите назначить некоторые переменные-члены. :) – GManNickG