Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Friend класс: вопрос, безопасности доступа 
V
    Опции темы
Rickert
  Дата 23.1.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Есть класс Б, который является friend'ом класса A. У класса А есть несколько private параметорв.
Вопрос: стоит ли какая-то угроза безопасности доступа к private'ам класса А? Ведь по сути - private'ы - нужны для того, чтобы закрыть нежелательный запрос к определённым параметрам, а тут его открывают smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Anikmar
Дата 23.1.2007, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Дружественный класс имеет доступ к private секции класса.

Что такое нежелательный запрос?
PM MAIL ICQ   Вверх
Sartorius
Дата 23.1.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



Цитата

Ведь по сути - private'ы - нужны для того, чтобы закрыть нежелательный запрос к определённым параметрам


 А друзья нужны что бы его открыть smile  Поскольку дружественные функции и класс требуют указания в описании класса, которое доступно только разработчику, а не пользователю этого класса, то никакой угрозы нет. ( Главное ведь скрыть поля от прямого изменения пользователем  smile )

Это сообщение отредактировал(а) Sartorius - 23.1.2007, 17:34
PM MAIL ICQ   Вверх
Anikmar
Дата 23.1.2007, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Sartorius @  23.1.2007,  17:33 Найти цитируемый пост)
Главное ведь скрыть поля от прямого изменения пользователем

Пользователю доступно описание класса. А если возьмет и вставит строчку friend... Или перенесет переменные из одной секции в другую? Линкер разве ругнется?


PM MAIL ICQ   Вверх
zkv
Дата 23.1.2007, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Anikmar, конечно может, он может вообще ехе-шник в нех-редакторе подправить. Ведь секции private и protected создаются не для того чтобы усложнить пользователю жизнь, а совсем наооборот, чтобы показать какие методы ему следует использовать, а какие используются для внутренних нужд. Если он откроет доступ. то никто ругаться естественно не будет.
PM MAIL   Вверх
Sartorius
Дата 23.1.2007, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



Не знаю ругнется ли линкер, если поменять описание класса(добавить какого нибудь друга).  (скорее всего нет , так как это дело только компилятора) Менять h-ник можно сколько угодно, но ведь что бы реально можно было вызывать эту дружественную функцию , нада все перекомпилировать. А без реализации класса этого не сделать...   smile

Добавлено @ 18:02 
 Присоединяюс к  zkv. Секции - это не борьба за копирайт и т.п., а средство, которое позволяет превратить логические ошибки в синтаксические
PM MAIL ICQ   Вверх
Anikmar
Дата 23.1.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



zkv, Совершенно согласен. Секции предназначены для самоконтроля и дисциплины.

Этот вопросик я задал перекликаясь с первым постом:
Цитата(Rickert @  23.1.2007,  16:56 Найти цитируемый пост)
 Ведь по сути - private'ы - нужны для того, чтобы закрыть нежелательный запрос к определённым параметрам, а тут его открывают   


Пользователю нельзя ничего запретить - если захочет, все равно влезет. А вот сказать заранее, куда лезть не надо - это да.

По-моему друзья придуманы для запоздалого исправления ошибок в проектировании класса smile

Добавлено @ 18:05 
Цитата(Sartorius @  23.1.2007,  18:00 Найти цитируемый пост)
Менять h-ник можно сколько угодно, но ведь что бы реально можно было вызывать эту дружественную функцию , нада все перекомпилировать. А без реализации класса этого не сделать...

Вот я и спросил - ругнется линкер или нет?
Перкомпиляция самого класса не нужна, просто находятся ли члены из приват-секции в таблице символов линкера?
PM MAIL ICQ   Вверх
Sartorius
Дата 23.1.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



Цитата

По-моему друзья придуманы для запоздалого исправления ошибок в проектировании класса    


 Может и так smile , но бывают случаи, когда друзья оказываются очень удобны. Ну например, при переопределении двухместных операций.... думаю при желании можно предумать множество примеров
PM MAIL ICQ   Вверх
Anikmar
Дата 23.1.2007, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Sartorius @  23.1.2007,  18:07 Найти цитируемый пост)
Может и так  , но бывают случаи, когда друзья оказываются очень удобны. Ну например, при переопределении двухместных операций.... думаю при желании можно предумать множество примеров 


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

Думаю  есть очень много оснований для использования друзей в более общем случае.
PM MAIL ICQ   Вверх
Rockie
Дата 23.1.2007, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(Sartorius @  23.1.2007,  17:33 Найти цитируемый пост)
 ( Главное ведь скрыть поля от прямого изменения пользователем   smile  )

пользователь? всмысле тот что кнопы жмакает? smile от такого вообще ничего не скроешь, все поломает! smile

Цитата(Anikmar @  23.1.2007,  18:11 Найти цитируемый пост)
 потом понадобился новый функционал, а класс лопатить уже неохота - результат появление друга...

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




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Anikmar
Дата 23.1.2007, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Rockie @  23.1.2007,  20:24 Найти цитируемый пост)
то есть объявить друга можно было а дописать метод, который бы обращался к приватным полям нельзя было?


Именно так. Класс вызывал форму, которая при закрытии должна была обнулить указатель на саму себя. Было лень писать метод - так как таких форм было порядка 10 (изначально ошибся в выборе стратегии - думал они будут модальные, а оказалось что неудобно работать)
Чем писать 10 методов (ну лень мне стало!) я обявил 10 форм друзьями.  smile 

ИМХО Работает и ладно! - не для преподавателя, для себя пишу.
PM MAIL ICQ   Вверх
KelTron
Дата 24.1.2007, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: нет
Всего: 38



Цитата(Rockie @  23.1.2007,  20:24 Найти цитируемый пост)
пользователь? всмысле тот что кнопы жмакает?  от такого вообще ничего не скроешь, все поломает! 

В данном случае пользователь это программист, при чем тут тот кто кнопки жмет


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Rockie
Дата 25.1.2007, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(KelTron @  24.1.2007,  10:05 Найти цитируемый пост)
В данном случае пользователь это программист, при чем тут тот кто кнопки жмет

KelTron, при том, что тот кто кнопки жмет, в состоянии поломать абсолютно все =)

Добавлено @ 03:15 
KelTron, вообще любое сообщение стоит рассматривать в контексте 




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Earnest
Дата 25.1.2007, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(Anikmar @  23.1.2007,  19:03 Найти цитируемый пост)
Вот я и спросил - ругнется линкер или нет?

Если изменить доступ, но не перекомпилировать библиотеку, то да: реальные имена включают модификаторы доступа, по крайней мере в MSVC. На добавление friend - нет.

Цитата(Anikmar @  23.1.2007,  22:36 Найти цитируемый пост)
Работает и ладно! - не для преподавателя, для себя пишу. 

С таким подходом быстро допишешься...


--------------------
...
PM   Вверх
Anikmar
Дата 25.1.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Earnest @  25.1.2007,  09:07 Найти цитируемый пост)
С таким подходом быстро допишешься... 


Спорный момент. Это не является критической ошибкой в подходе и никоим образом не приведет к косякам - так как и класс и формы находятся в одной библиотеке, и даже если другой программист будет этой библиотекой пользоваться ничего страшного не произойдет.

PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0952 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.