Функции-друзьяФункции-друзья Иногда требуются исключения из правил доступа, когда некоторой функции или классу требуется разрешить доступ к личной части объекта класса. Тогда в определении класса, к объектам которого разрешается такой доступ, должно быть объявление функции или другого класса как "дружественных". Это согласуется с тем принципом, что сам класс определяет права доступа к своим объектам "со стороны". Объявление дружественной функции представляет собой прототип функции, объявление переопределяемой операции или имя класса, которым разрешается доступ, с ключевым словом friend впереди. Общая схема объявления такова: class B // Необходим доступ к личной части класса A{public: int fun1(A&); void fun2(A&);};class C{public: void fun(A&); void operator+(A&); };class A // предоставляет доступ к личной части{ int x; // Личная часть класса //... friend class B; // Функции класса B дружественны A // (имеют доступ к приватной части A) friend void C::fun(A&); // Элемент-функция fun класса C имеет // доступ к приватной части A friend void xxx(A&,int); // Функция xxx дружественна классу A friend void C::operator+(A&); // Переопределяемая в классе C // операция <объект C>+<объект A>}; // дружественна классу A
|