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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
#1

класс Friend - C++

25.02.2014, 17:43. Просмотров 268. Ответов 3
Метки нет (Все метки)

Подскажите в каких случаях лучше использовать класс friend?
Известно что класс friend нарушает принцип инкапсуляции, так почему же мы его используем?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2014, 17:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос класс Friend (C++):

Класс friend - C++
Проблемка с доступом через дружественный класс: class Game { friend Player; //тут объявлен класс-друг ...

Friend - класс шаблон - C++
Подскажите, пожалуйста, почему Visual C++ 2010 Express нормально компилирует код template <class NODETYPE> class QueueNode { ...

Перегрузка операторов, friend или нет friend? - C++
Всем здравствуйте. Есть такой вопрос: при перегрузке операторов в классе(пусть будут + и = (вообще неважно, за исключением потока)) как и...

Friend для friend - C++
всем доброго времени суток, покажу проблему на примере: Class B; class A{ int F; friend B; public: A(){F=0;}; };

Friend-функции - C++
из теории ясно, что friend функция — это функция, которая не является членом класса, но имеет доступ к членам класса, объявленным в полях...

friend class - C++
#include <iostream> using namespace std; #include <string> using std::string; class two; class one { friend...

3
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,401
Завершенные тесты: 1
25.02.2014, 18:05 #2
Класс назначается дружественным в случае тесного взаимодействия с ним.
Например, создаем класс Дерево, которому нужен доступ к классу Ветвь.
Тогда Дерево должно быть другом к Ветвь.
0
Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
25.02.2014, 19:43  [ТС] #3
у меня двусвязный список, это не совсем дерево... Да и не видел я что бы дерево как друг обьявлялся...
0
Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
09.03.2014, 13:08  [ТС] #4
Узнал почему, мб кому понадобится:

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

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

Если убрать этот оператор, то тогла надо будет написать функции set_next(Issue *I) и set_prev(Issue *I). Но в таком случае любые другие классы будут иметь доступ к связям списка и инкапсуляция тогда будет нарушена ещё больше. Из двох зол мы выбрали меньшее.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2014, 13:08
Привет! Вот еще темы с ответами:

Не работает friend - C++
#ifndef INTEGERLONGS_HPP_INCLUDED #define INTEGERLONGS_HPP_INCLUDED...

friend function - C++
После добавления дружественной ф-ции sum( а она для сложения salary у человека, которого я выберу) класс перестал работать. Что у меня не...

Friend класса - C++
#include <iostream> class assoc { struct pair { char* name; int val; }; int free;

Friend function - C++
Нужно сделать функции Length и Angle френдовыми для другого класса. Как это запилить? Sect.h #include <iostream> #include <math.h> ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
09.03.2014, 13:08
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru