Использование функций - друзей

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Использование функций - друзей

Сообщение SeRRg » 24.11.2005 (Чт) 15:35

Здравствуйте!
Хочу обратиться к вам вот с каким вопросом:

Язык Visual C++ ( из .net )
Можно ли привести пример, в котором невозможно обойтись без применения классов-друзей?

Как я понял, функция-друг - это функция которая имеет право доступа к закрытой части класса, для которого она

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

задания так и звучит - " привести пример, в котором невозможно обойтись без классов-друзей ".
Может, это задание некорректно поставлено? Подскажите пожалуйста такой пример, если он вообще есть.
VB - это звучит!

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 24.11.2005 (Чт) 17:29

Ну, что первое в голову пришло: есть класс A.

class A
{
public:
int ReturnInt()
{
return m_Int;
}
protected:
int m_Int;
};

И ты захотел вынести функцию из класса, но при этом сохранить ее функциональность, то:

class A
{
friend int ReturnInt(A& obj);
protected:
int m_Int;
};


int ReturnInt(Test& obj )
{
return obj.m_Int;
}
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 24.11.2005 (Чт) 18:41

Это правильно, но тут как раз все равно, френд она или в самом классе.

Я уже плохо это все помню, поэтому, возможно, сейчас скажу чушь, но идея такая: в одном классе есть protected-переменная a, в другом - protected-переменная b, а тебе нужно возвращать a*b. Тогда делаешь функцию мембером одного класса и френдом другого.

Хотя вопрос странный - всегда можно обойтись без френд функций. Объявить все переменные в классе как public - дурное дело нехитрое... :)
Быть... или не быть. Вот. В чём вопрос?

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 25.11.2005 (Пт) 0:22

А вообще, приведите пожалуйста пример в котором их вообще целесообразнее использовать, чем другой метод (ну хотя бы чем объявление public и чем механизм наследования).
VB - это звучит!

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 25.11.2005 (Пт) 0:23

А вообще, приведите пожалуйста пример в котором их вообще целесообразнее использовать, чем другой метод (ну хотя бы чем объявление public и чем механизм наследования).
VB - это звучит!

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 25.11.2005 (Пт) 0:24

А вообще, приведите пожалуйста пример в котором их вообще целесообразнее использовать, чем другой метод (ну хотя бы чем объявление public и чем механизм наследования).
VB - это звучит!

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 25.11.2005 (Пт) 0:36

А вообще - есть ли такие примеры в которых целесообразнее использовать friend вместо допустим того же вынесения всего в public или использования механизма наследования?
VB - это звучит!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.12.2005 (Сб) 10:40

SeRRg писал(а):Можно ли привести пример, в котором невозможно обойтись без применения классов-друзей?

Если строго отнестись к вопросу, то таких примеров нет, потому что всё, что можно сделать через friend, можно сделать так же через public. Правда при этом все получат тот уровень доступа, который иметь не должны.

SeRRg писал(а):целесообразнее использовать friend вместо допустим того же вынесения всего в public или использования механизма наследования?

Вот это уже вопрос более правильный.
Возьми любой класс, у которого некоторое свойство только для чтения. И при этом есть friend-функция, которая может это же свойство задавать. Собственно, так часто делают в VB при создании public-non-creatable классов.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 98

    TopList