C ++: Плохая практика использовать дружественные классы вместо написания методов получения / установки? - PullRequest
10 голосов
/ 05 марта 2011

У меня есть два класса, которые в одном аспекте тесно сотрудничают. Они оба используют функциональность друг друга, которая должна использоваться только ими, а не любым другим классом.

  • Разве это плохая практика, если я подружу эти два класса, чтобы они могли напрямую обращаться и управлять переменными-членами друг друга, без использования каких-либо функций получения / установки?

Ответы [ 2 ]

17 голосов
/ 05 марта 2011

И геттеры, и сеттеры, и классы-друзья уменьшают инкапсуляцию и увеличивают связь.По крайней мере дружба ограничивает сокращенную инкапсуляцию явно указанными классами, которым нужен дополнительный доступ.Тот факт, что два класса теперь тесно связаны, не должен быть плохим, их можно рассматривать как единое целое в общем проекте.

11 голосов
/ 05 марта 2011

Нет, совсем нет.Это обычная вещь, что у вас есть один класс, но его нужно разделить на два для жизни и других реализаций.В этом случае классы друзей определенно являются подходящим вариантом.

Если изменение реализации одного класса означает, что вам придется изменить реализацию другого, то это определенно применимо.Особенно, если вам нужны элементы интерфейса между этими двумя, которые не относятся к общедоступным.

Классы друзей существуют по причине.

...