Каково реальное использование функции / класса друга в C ++? Не могли бы вы привести пример, где только friend
является правильным подходом?
Спасибо
Каково реальное использование функции / класса друга в C ++? Не могли бы вы привести пример, где только friend
является правильным подходом?
Спасибо
«В C ++ только ваши друзья могут получить доступ к вашим личным частям».
Смысл друга в том, что вы можете упаковать свое программное обеспечение в более мелкие группы, например классы друзей и т. Д., При этом сохраняя доступ к внутренним компонентам класса. Это, вероятно, позволяет вам поддерживать более тонкий контроль над инкапсуляцией, чем без добавления друзей.
Я думаю, что часто использование функции друга - это вопрос удобочитаемости. Например, следующий перегруженный оператор выглядит симметрично, и это может быть полезно для чтения кода.
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;
}
Но главное - это их способность получать доступ к приватным данным двух разных классов.
Использование friend
на самом деле очень не рекомендуется в C ++ (это как бы нарушает всю идею инкапсуляции), но мне приходит в голову пример, когда только друг является правильным подходом:
friend ostream & operator<< (ostream & out, const MyClass & C);
friend istream & operator>> (istream & in, MyClass & C);
friend
не приветствуется.
- person juliomalegria; 23.12.2011
friend
, вы игнорируете эту ограниченную часть класса, поэтому это противоречит инкапсуляции.
- person juliomalegria; 23.12.2011
friend
плохо, очень плохо для инкапсуляции.
- person juliomalegria; 23.12.2011