Дружественные функции
Ключевое слово friend предоставляет функции, не являющиеся членном класса, доступ к закрытым членам этого класса. Для создания д. функции необходимо включить её прототип в открытый раздел объявления класса и предварить прототип ключевым словом friend. friend прототип_функцииНапример, в следующих классах функция myfunc(), которая не входит в состав классов, являться дружественной по отношению этих классов.
class myclass2; //предварительное объявление класса myclass2;
class myclass1{
int x;
public:
friend void myfunc(myclass1 c1, myclass2 c2, int val);
};
class myclass2{
int y
public:
friend void myfunc(myclass1 c1, myclass2 c2, int val);
};
void myfunc(myclass1 c1, myclass2 c2, int val){
c1.x=val;
c2.y=val;
};
myclass1 c1;
myclass2 c2;
myfunc(c1, c2, 2); /*устанавливаем значение приватным переменным x и y
объектов c1 и c2 соответственно, значение 2*/
Дружественная функция может быть не только внешняя, но и функция - член другого класса.
class my2;
class my1{
int x;
public:
set(my2 c){
my2.y = x;
}
};
class my2{
int y;
public:
friend int my1::set(my2 c);
};
my1 m1; my2 m2;
m1.set(m2); /*устанавливаем приватную переменную y класса m2
значением приватной переменной x класса m1*/
Дружественные классыПри объявлении класса можно объявить сразу все функции-члены другого класса дружественными одним объявлением. Например.
class X{...};
class Y{
public:
friend class X;
};
|