![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Nick112411 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Здравствуйте. Нужно написать простенькую программу на любую тему, демонстрирующую работу дружественных классов или функций. Если есть исходник любой, выложите пожалуйста Спасибо.
|
|||
|
||||
| paSha_X |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 5.12.2006 Где: Беларусь, Минск Репутация: 1 Всего: 2 |
Упрости если чё, главное смысл.......
|
|||
|
||||
| Nick112411 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Спасибо! Если есть попроще, выложите пожалуйста
|
|||
|
||||
| paSha_X |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 5.12.2006 Где: Беларусь, Минск Репутация: 1 Всего: 2 |
Ну вот попроще.....
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
paSha_X, какой же ж это пример дружественных функций? Ничего бы в функциональности не изменилось, если бы ты убрал ключевое слово friend...
Суть дружественных функций в том, что в классе какая-либо функция объявляется дружественной(friend), но сама функция определяется за пределами класса... Может даже в другом .cpp - файле. Но при этом имеет доступ ко всем членам класса. Переделаю немного этот пример:
Что-нибудь типа такого. |
|||
|
||||
| Rockie |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Nick112411, ну давай попробуем.
максимально упрощая: тот, кого объявили в классе другом, имеет доступ к любым членам этого класса. Но следует помнить, что friend - функции вообще противоречат ООП, так как нарушается инкапсуляция. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
отвечу за Rockie для этого есть открытые методы причем все, что можно вывести в поток, должно быть доступно через методы (иначе зачем скрывать содержимое, не делая к нему интерфейс и при этом выводить это самое во внешнюю среду?) при таком подходе в принципе friend можно не использовать Это сообщение отредактировал(а) MAKCim - 8.12.2006, 22:48 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
MAKCim, спасибо! =)
JackYF, ну я впринцыпе был уверен, что этой фразой даю повод подискутировать -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| zabivator |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 7.6.2006 Где: нск Репутация: 1 Всего: 2 |
Любое свойство языка может быть вредно в той же степени, что и полезно. всегда можно обойтись без френдов, однако всегда можно обойтись и без классов, не так ли ;)
--------------------
#include <zabivator>int main( int, char * [] ){ while( Zabivator::жив() ) Zabivator::моск()++; return 0;} |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
В плане функционала - да. В плане проектирования - нет. А вот без френдов действительно можно обойтись всегда. Просто не всегда это традиция плюсов.
|
|||
|
||||
| zabivator |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 7.6.2006 Где: нск Репутация: 1 Всего: 2 |
Любитель, традиционное использование френдов позволяет упростить код =) существенно =)
--------------------
#include <zabivator>int main( int, char * [] ){ while( Zabivator::жив() ) Zabivator::моск()++; return 0;} |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
открытые данные тоже, на первый взгляд, упрощают код. ) |
|||
|
||||
| zabivator |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 7.6.2006 Где: нск Репутация: 1 Всего: 2 |
Fazil6, нет. Они его просто ломают. Друзья - контролируемый способ доступа. Типа методов, только зыс не передается. А открытые члены - доступ откуда угодно... Как минимум невозможно поддержка инвариантов.
--------------------
#include <zabivator>int main( int, char * [] ){ while( Zabivator::жив() ) Zabivator::моск()++; return 0;} |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Согласен с
zabivator. Не хочет класс дружить ни с кем - его право |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |