Какова правильная/лучшая практика перегрузки арифметических операторов в C++? [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
 Какова правильная/лучшая практика перегрузки арифметических операторов в C++? [дубликат]

Сообщение Anonymous »

Я знаю, что это зависит от варианта использования, поэтому приведу пример. Я создал класс (в целях обучения) для представления рационального числа:

Код: Выделить всё

class Rational
{
int numerator = 0;
int denominator = 0;

public:
// CONSTRUCTORS
Rational(int n, int d);

// OPERATOR OVERLOADING
Rational &operator=(const Rational &r);
const Rational operator+(Rational r);

// GETTERS
const int getNumerator() { return numerator; }
const int getDenominator() { return denominator; }

// SETTERS
void setNumerator(int n) { numerator = n; }
void setDenominator(int d) { denominator = d; }
};
Я перегрузил оператор +, чтобы иметь возможность складывать 2 рациональных числа с помощью следующей функции:

Код: Выделить всё

const Rational Rational::operator+(Rational r)
{
int newDen = 0;
int newNum = 0;

if (denominator == r.getDenominator())
{
newDen = denominator;
newNum = numerator + r.getNumerator();
}
else
{
// MAKE DENONIATOR THE SAME
newDen = denominator * r.getDenominator();
// MULTIPLY THEN ADD NUMERATORS
newNum = (numerator * r.getDenominator()) + (r.getNumerator() * denominator);
}
// SIMPLIFY
// RETURN A NEW RATIONAL
return simplify(Rational{newNum, newDen});
}
Код запускается и работает отлично. Это нормально? Или мне следует сделать что-то другое (например, использовать константную ссылку, использовать ключевое слово «this» и т. д.)? Если да, то почему?
Возможно, я слишком много читаю об этом, но мне бы хотелось разработать лучшие практики C++ сейчас, пока я учусь, чтобы мне не приходилось изо всех сил пытаться от вредных привычек избавьтесь позже.
Спасибо :))

Подробнее здесь: https://stackoverflow.com/questions/790 ... ators-in-c

Вернуться в «C++»