Задать вопрос
Nadgob
@Nadgob
Embedded software engineer

Как перегрузить оператор и не вызвать ненависть коллег?

Осваиваю ООП на собственном маленьком проекте. Столкнулся с вопросом как изящно организовать сложение в простеньком классе. Класс содержит всего 2 переменные:
qint64 value; 
pm_currency_t currency; // тип валюты

С одной стороны я хочу реализовать возможность сложения для этого класса, с другой я не хочу позволять сложение с разным типом валюты.
Насколько хорошей идеей будет перегрузка '+' для этого класса?
При попытке сложить разную валюту, какой будет лучшая реакция: возврат null_ptr, выброс исключения, что-то другое?
  • Вопрос задан
  • 174 просмотра
Подписаться 1 Простой 4 комментария
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
1) В данном случае, идея хорошая, так как семантика поломана не будет, но при условии, что
2) В случае несовпадения валют вы будете бросать исключение.

Пояснение: Если вы будете возвращать не валюту, (nullptr, false, не важно), вы сломаете семантику сложения, а это делать не следует. Так что ошибку надо обрабатывать в исключении.

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

Если же валюта вам известна уже на этапе компиляции, переделайте ваш класс в шаблон и делайте все проверки уже на этапе компиляции - это наилучший вариант.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы