Надлежащее использование друга? Класс-контейнер, предназначенный для управления объектами определенного типа.

Допустим, у вас есть FooManager для управления несколькими объектами типа Foo. FooManager необходимо увидеть некоторые части своих Foo, чтобы оценить их текущее состояние. Прежде чем я использовал несколько методов доступа в Foo, чтобы увидеть эти части, пока я не понял, что FooManager — единственный класс, который фактически их использует. Я решил сделать FooManager другом Foo. Это привело к тому, что большая часть класса Foo стала частной.

Уместно ли это использование слова «друг»? Я полагал, что это помогает инкапсуляции, потому что, предоставляя FooManager полный доступ к Foo внутренностям, он полностью блокирует доступ ко всему остальному.


person random    schedule 19.07.2010    source источник


Ответы (1)


Если нет другого и более чистого способа достичь того, чего вы пытаетесь достичь, это звучит как справедливый подход.

Что касается инкапсуляции, см.: http://www.parashift.com/c++-faq-lite/friends.html#faq-14.2.

person synhershko    schedule 19.07.2010
comment
На самом деле я использовал идиому «Адвокат-Клиент», которую опубликовал один парень, но, к сожалению, его ответ пропал. Ну что ж. - person random; 19.07.2010