Друзья (friends)
Другом класса является функция не-член, которая может использовать имена закрытых членов. Следующий пример иллюстрирует различия между членами и друзьями:
class private { int a; friend void friend_set (private*,int); public: void member_set (int); };
void friend_set (private* p,int i) { p-a=i; }
void private.member_set (int i) { a = i; }
private obj;
friend_set (obj,10);
obj.member_set (10);
Если описание friend относится к перегруженному имени или операции, то другом становится только функция с описанными типами параметров. Все функции класса cl1 могут быть сделаны друзьями класса cl2 с помощью одного описания
class cl2 { friend cl1; . . . };