Нет. При правильном использовании друзья на самом деле усиливают инкапсуляцию, а не подрывают её.
Друзья наиболее полезны, когда разделяешь один класс на два отдельных, которым нужен прямой доступ к приватным членам друг друга. Обычно это происходит, когда:
В таких сценариях сделать классы друзьями друг друга — самый безопасный подход к реализации. Ты не расширил доступ к приватным данным — ты просто разбил один класс на два.
Многие разработчики пытаются обойтись без дружбы, прибегая к худшим альтернативам, которые на самом деле разрушают инкапсуляцию:
Эти альтернативы предлагают ложную инкапсуляцию, создавая иллюзию приватности.
Посмотри на друзей иначе:
friend-функция обладает ровно теми же правами, что и публичные методы классаИнкапсуляция — это контроль над тем, кто может получать доступ к твоим приватным данным. Объявление friend-функции явно управляет этим доступом, делая её столь же легитимной, как любой метод класса. Барьер инкапсуляции образован как методами класса, так и авторизованными друзьями — а не чем-то одним из двух.
Friend-классы нарушают инкапсуляцию, позволяя внешнему коду получать доступ к приватным членам, которые в других случаях были бы защищены от несанкционированного доступа.
Новый — ещё не проверен сообществом
Вы