Зачем нужны дружественные функции. Пример 1-й

Зачастую дружественные функции используют нарушая принципы инкапсуляции. Хотя, мне, например, неизвестино, что это значит. С ООП я не знаком. Программирование классов не является программированием ООП. Тем не менее, дружественные функции не всегда нарушают принципы инкапсуляци, но иногда даже усиливают инкапсуляцию. Зачем эти дружественные функции вообще использовать и кому они нужны, понимают немногие. На самом деле существуют ситуации, где их использование оправдано. Эта тема описывает только одну из ситуаций. Все ситуации не описываются, потому что тема ориентирована на новичка, который с классами и знаком-то буквально со вчерашнего дня.
Давайте перегрузим операцию, например, сравнения нашему самописному класу.

Возникла такая ситуация, потому что классы почти ничего не умеют. Объекты создаваемых нами классов надо многому учить. Научим x операции сравнения с целыми числами, тип которым int.

Пока ещё имеются определёные ограничения, но коли выражение сравнения теперь работает, его можно использовать в определёных случаях. Используем сравнение в проверке if.

В нашем решении операция сравнения выглядит неэстетично. Достаточно странно располовинено, одну часть вытаскиваем из объекта запросом: используем метод get(), описаного в классе, а вторую часть используем напрямую. К сожалению, напрямую, в максимально удобном виде, сейчас использовать перегрузку сравнения нельзя, но к счастью, есть выход из сложившейся ситуации: задействование дружественных функций.

Написанию этой статьи поспособствовал ответ из форума: зачем нужны дружественные функции (3-й пример).
Показанный пример не только не нарушает инкапсуляцию, но и усиливает её. Кроме операций сравнения есть другие операции, ради которых которые разумно использовать дружественности функций: !, !=, <<, >>.
Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

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

Ваш e-mail не будет опубликован.

14 − = 4

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/oleg-valpa/borland-c-builder-ekspress-kurs/?lfrom=15589587
Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Солидной компании на постоянную работу требуется девушка приятной внешности со знанием Linux, программирование встраиваемых микроконтроллеров на C/C++/ASM, знание Linux - установка и настройка (сеть, графика, установка драйверов); C , Python, технологии ООП, GTK (желательно PyGTK) или Qt, SQL и XML - базовые знания; понимание многопоточности и синхронизации потоков.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок