Урок №132. Перегрузка операторов через обычные функции

  Юрий  | 

    | 

  Обновл. 18 Июн 2019  | 

 6236

 ǀ   1 

В предыдущем уроке мы перегружали operator+ через дружественную функцию:

Использование дружественной функции для перегрузки оператора удобно тем, что мы имеем прямой доступ ко всем членам класса, с которым работаем. В примере выше наша дружественная функция перегрузки оператора + имеет прямой доступ к закрытому члену m_dollars класса Dollars.

Однако, если нам не нужен доступ к членам определённого класса, то мы можем перегрузить оператор и через обычную функцию. Обратите внимание, в классе Dollars присутствует геттер getDollars(), с помощью которого мы можем получить доступ к m_dollars извне класса. Перепишем перегрузку оператора + через обычную функцию:

Поскольку принцип перегрузки операторов через обычные и дружественные функции почти идентичен (они просто имеют разные уровни/условия доступа к закрытым членам класса), то единственное отличие заключается в том, что в случае с дружественной функцией, её нужно обязательно объявить в классе + ещё определить вне тела класса (или в классе), в то время как обычную функцию достаточно просто определить вне тела класса, без указания дополнительного прототипа функции.

Dollars.h:

Dollars.cpp:

main.cpp:

Для перегрузки операторов рекомендуется использовать обычные функции, нежели дружественные, если в классе, конечно, присутствуют геттеры (чем меньше функций касается внутренних элементов вашего класса, тем лучше). Однако не добавляйте дополнительный геттер только для того, чтобы перегрузить оператор через обычную функцию вместо дружественной! Если геттера нет по умолчанию или он не используется вообще (в нём нет необходимости), то тогда используйте перегрузку через дружественные функции.

Правило: Используйте перегрузку операторов через обычные функции, вместо дружественных, если для этого не требуется добавление дополнительных функций в класс.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (55 оценок, среднее: 4,91 из 5)
Загрузка...

Комментариев: 1

  1. Аватар Илья:

    Не знаю,если внимательно следить за своими действиями и не напортачить в реализации своих операторов,то, перегружая операторы через дружественную функцию.мы имеем гораздо меньше геммороя
    +не тратятся ресурсы на вызов геттера(небольшая оптимизация)

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *