Дружественные функции
Ключевое слово 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; }; |
Нет комментариев. Оставить комментарий: |