Форум программистов, компьютерный форум CyberForum.ru

класс Friend - C++

Восстановить пароль Регистрация
 
Аммурка
 Аватар для Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
25.02.2014, 17:43     класс Friend #1
Подскажите в каких случаях лучше использовать класс friend?
Известно что класс friend нарушает принцип инкапсуляции, так почему же мы его используем?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2014, 17:43     класс Friend
Посмотрите здесь:

Friend Function C++
Friend класса C++
friend function C++
Не работает friend C++
Класс friend C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5955 / 5560 / 1788
Регистрация: 18.12.2011
Сообщений: 14,209
Завершенные тесты: 1
25.02.2014, 18:05     класс Friend #2
Класс назначается дружественным в случае тесного взаимодействия с ним.
Например, создаем класс Дерево, которому нужен доступ к классу Ветвь.
Тогда Дерево должно быть другом к Ветвь.
Аммурка
 Аватар для Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
25.02.2014, 19:43  [ТС]     класс Friend #3
у меня двусвязный список, это не совсем дерево... Да и не видел я что бы дерево как друг обьявлялся...
Аммурка
 Аватар для Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
09.03.2014, 13:08  [ТС]     класс Friend #4
Узнал почему, мб кому понадобится:

Всё, что делает оператор friend - это даёт доступ указанному классу к private и protected членам данного класса. По теории это всё.

В нашем случае мы даём доступ классу-контейнеру BookList доступ к приватным элементам m_next и m_prev класса Issue. Это необходимо для того, чтобы контейнер мог изменять связи между элементами списка при удалении элементов списка.

Если убрать этот оператор, то тогла надо будет написать функции set_next(Issue *I) и set_prev(Issue *I). Но в таком случае любые другие классы будут иметь доступ к связям списка и инкапсуляция тогда будет нарушена ещё больше. Из двох зол мы выбрали меньшее.
Yandex
Объявления
09.03.2014, 13:08     класс Friend
Ответ Создать тему
Опции темы

Текущее время: 10:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru