C ++ дружественные функции / класс использует? - PullRequest
1 голос
/ 23 декабря 2011

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

Спасибо

Ответы [ 3 ]

8 голосов
/ 23 декабря 2011

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

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

0 голосов
/ 23 декабря 2011

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

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;
}

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

0 голосов
/ 23 декабря 2011

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

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