Что такое использование функции/класса друга в C++? Не могли бы вы привести пример, где только friend
- правильный подход?Функции/класс друзей C++?
Благодаря
Что такое использование функции/класса друга в C++? Не могли бы вы привести пример, где только friend
- правильный подход?Функции/класс друзей C++?
Благодаря
«В C++, только ваши друзья могут получить доступ к своим интимным местам.»
Точка друга заключается в том, что вы можете упаковать свое программное обеспечение в более мелкие группы, такие как классы друзей и т. Д., Сохраняя при этом доступ к внутренним элементам класса. Это, возможно, позволяет поддерживать более тонкий контроль над инкапсулированием, чем без дружелюбия.
Использование friend
на самом деле очень обескуражен в C++ (это своего рода разбивает всю инкапсулирования идею), но это приходит на ум пример, где только друг правильный подход:
friend ostream & operator<< (ostream & out, const MyClass & C);
friend istream & operator>> (istream & in, MyClass & C);
Почему разные операторы ввода и вывода отличаются друг от друга? Если вы хотите дать пользователю возможность читать/записывать данные класса из/в поток, почему бы не предоставить им публичные аксессоры к данным? Тогда операторы не должны быть друзьями, так как они могут вызывать публичные аксессоры. –
Дружба увеличивает инкапсуляцию. –
Есть много случаев, когда вы хотите, чтобы класс имел поведение iostream, но вы не хотите предоставлять публичным доступа к некоторым атрибутам. Это может показаться противоречивым .. потому что это так, и именно поэтому «друг» обескуражен. – juliomalegria
я думаю, что часто друг функция использование его является вопросом удобочитаемости. Например, следующий перегруженный оператор выглядит симметрично, и это может быть полезно для чтения кода.
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;
}
Но главное, его способность получить доступ к личным данным двух разных классов.
Посмотрите эти вопросы в правой части экрана? Нажмите несколько из них. Они актуальны. – Blender
Да, получил хороший здесь: http://stackoverflow.com/questions/17434/when-should-you-use-friend-in-c. Я должен был сделать еще несколько исследований, прежде чем задавать свой вопрос, извините :-( – Sanish
Расширение открытого интерфейса и документирования связи: http://programmers.stackexchange.com/a/99595/12917 –