Использование friend
Мне кажется, что эта функция немного взломана. Делать friend
функции нарушают концепцию инкапсуляции?
Какие есть альтернативы friend
функционировать? Будет ли использовать простой вспомогательный класс / функцию вместе с сеттер & добытчик функции-члены помогают увеличить инкапсуляцию по сравнению с просто использованием friend
?
Делать
friend
функции нарушают концепцию инкапсуляции?
По факту, это не. Прежде всего, обратите внимание, что это не нарушает инкапсуляцию более public
участники делают. Являются public
Участники нарушения концепции инкапсуляции? Очевидно нет. Более того, во многих ситуациях friend
увеличивает инкапсуляцию, а не нарушает ее, так как позволяет поддерживать private
вещи как private
вместо того, чтобы выставлять данные в масштабе всей системы, используя public
члены, что делает всю концепцию этого существа private
скрыто от невооруженного глаза. Это противоположно предоставлению намерения в вашем коде, и оно должно поднимать красный флаг, когда это замечено. friend
позволяет смягчить эту проблему, поскольку дает вам контроль над тем, кто может получить доступ к тем членам, которые хранятся private
чтобы все знали, что они есть. C ++ FAQ поднимает один пример в котором вы можете использовать friend
чтобы решить проблему дизайна, чтобы вы могли контролировать доступ к точке, в которой вы не совсем количество кода, который имеет доступ к private
частей.
Не должен простой вспомогательный класс / функция вместе с сеттером & Функции члена getter могут спасти этот недостаток проекта?
Что ж, использование вспомогательного класса определенно может удовлетворить некоторые из тех friend
сделать, но много раз неоправданно более громоздким, чем просто использование friend
, О функции или геттере / сеттере, которая звучит для меня как использование общественности члены, чтобы непосредственно выставить частный те, недостатки которых описаны выше.
… или это не должно рассматриваться как плохая практика проектирования?
В качестве заключительного замечания, постарайтесь избегать субъективных вопросов здесь, например, следует ли что-то или не следует рассматривать как X. Давайте придерживаться фактов! 🙂
Функция друга нарушает концепцию инкапсуляции?
Нет это Усиливает инкапсуляция, потому что альтернативой будет сделать член public
,