Какова правильная/лучшая практика перегрузки арифметических операторов в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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