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

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

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

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

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

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

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

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

Поиск

 
     

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

https://www.litres.ru/zhan-zhak-levi/vvedenie-v-teoriu-yazykov-programmirovaniya-6089802/?lfrom=15589587
Яндекс.Метрика