Можете ли вы объяснить мне, почему friend
ключевое слово является предпочтительным для предоставления прав доступа к закрытым данным класса?
c++
definition
Dalton
источник
источник
friend
было предпочтительным, какие другие способы вы обычно используете для доступа к данным частного класса извне?Ответы:
Friend - это классический способ расширения интерфейса класса.
Но самое замечательное в том, что друг явно задокументировал ваше намерение тесно связать определенные предметы с классом.
Примечание. Используя друга, вы жестко привязываете друзей к классу.
Прекрасным примером являются операторы потока в C ++
Здесь мы расширяем открытый интерфейс класса Plop таким образом, который позволяет нам направлять объект в поток и из потока, но не подвергая внутреннюю реализацию или вызывая будущие трудности реализации, требуя использования методов get / set, которые должны поддерживаться (потому что они будут частью открытого интерфейса), даже если внутренняя реализация изменена.
Примечание. Это НЕ нарушает инкапсуляцию, но тесно связывает потоковые операторы с реализацией класса Plop (т.е. любое изменение в реализации класса Plop потребует изменения в реализации потоковых операторов). Но это ожидается. Все части открытого интерфейса (включая публичные / защищенные методы) тесно связаны с реализацией.
Но обратите внимание: вы явно задокументировали эту привязку как часть объявления класса.
Примечание: я бы не назвал друга предпочтительным способом раскрытия личных данных. Чрезмерное использование друга может быть так же плохо, как разоблачение реализации. Как и все языковые функции, его следует использовать разумно.
источник