При манипулировании членами данных: что из следующего считается лучшей практикой

Я хочу начать применять лучшие практики и видел, как учениками манипулировали по-разному. Я не знаю ни тонких, ни существенных различий в следующем примере.

Я хотел бы уточнить оптимальный подход, если любое из двух или другого предложения.

const Fraction & Fraction::timesEq(const Fraction & f) {

//First approach
numerator *= f.numerator;
denominator *= f.denominator;

//Second approach
numerator *= f.getNumerator();
denominator *= f.getDenominator();

return (*this); //would 'return' statement this be considered best practice?
}

1

Решение

Второй подход переживает создание подклассов и возможные виртуальные переопределения методов если это имеет значение для конкретного случая но более громоздким и скучным.

3

Другие решения

В простом классе, представляющем такие рациональные числа, как ваш, я бы следовал принципу KISS и перешел к первому.

Если класс более сложный и / или вам нужна гибкость (возможно, виртуальная) методов получения / установки, может быть хорошей идеей быть последовательным и полностью отделенным от представления:

const Fraction & Fraction::timesEq(const Fraction & f) {
setNumerator(getNumerator() * f.getNumerator());
setDenominator(getDenominator() * f.getDenominator());
return *this;
}

Стоит ли это дополнительной сложности, нужно решать в каждом конкретном случае.

3

Я бы порекомендовал третий подход. Он изолирует функцию от представления числителя и знаменателя.

onst Fraction & Fraction::timesEq(const Fraction & f) {

this->getNumerator() *= f.getNumerator();
this->getDenominator() *= f.getDenominator();

return (*this);
}
2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector