2011-12-23 5 views
1

Что такое использование функции/класса друга в C++? Не могли бы вы привести пример, где только friend - правильный подход?Функции/класс друзей C++?

Благодаря

+1

Посмотрите эти вопросы в правой части экрана? Нажмите несколько из них. Они актуальны. – Blender

+1

Да, получил хороший здесь: http://stackoverflow.com/questions/17434/when-should-you-use-friend-in-c. Я должен был сделать еще несколько исследований, прежде чем задавать свой вопрос, извините :-( – Sanish

+0

Расширение открытого интерфейса и документирования связи: http://programmers.stackexchange.com/a/99595/12917 –

ответ

8

«В C++, только ваши друзья могут получить доступ к своим интимным местам.»

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

+2

Вы должны приехать из Калифорнии ?! –

+0

@EdHeal: LOL why ?! – Mehrdad

+0

О, эти классы! Всегда экспериментируйте с их друзья! (Ваша цитата сделала меня на самом деле lol: p) – Corbin

-2

Использование friend на самом деле очень обескуражен в C++ (это своего рода разбивает всю инкапсулирования идею), но это приходит на ум пример, где только друг правильный подход:

friend ostream & operator<< (ostream & out, const MyClass & C); 
friend istream & operator>> (istream & in, MyClass & C); 
+1

Почему разные операторы ввода и вывода отличаются друг от друга? Если вы хотите дать пользователю возможность читать/записывать данные класса из/в поток, почему бы не предоставить им публичные аксессоры к данным? Тогда операторы не должны быть друзьями, так как они могут вызывать публичные аксессоры. –

+1

Дружба увеличивает инкапсуляцию. –

+0

Есть много случаев, когда вы хотите, чтобы класс имел поведение iostream, но вы не хотите предоставлять публичным доступа к некоторым атрибутам. Это может показаться противоречивым .. потому что это так, и именно поэтому «друг» обескуражен. – juliomalegria

0

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

friend const X operator+(const X&, const X&); 

inline const X operator+(const X& arg1, const X& arg2) 
{ 
    X r; 
    r.x = arg1.x + arg2.x; 
    return r; 
} 

Но главное, его способность получить доступ к личным данным двух разных классов.