Кто бы ни сказал вам, что функции ваших друзей улучшают инкапсуляцию, он совершенно неправ, он полная противоположность. Им действительно нет места в настоящем ООП-мире.
Однако жизнь редко бывает идеальной, и иногда вам нужно вызывать защищенные методы из других классов в вашей среде, не подвергая их внешним воздействиям. C # и Java решили эту проблему очень элегантно: у них есть модификатор internal
(с немного другими значениями), но в C ++ все, что у вас есть, это friend
.
Если вы действительно программировали в течение 7 лет, не нуждаясь в этой конструкции, то вы либо создаете каждый метод и переменную в своем классе public
, либо вообще не используете классы.