Объектно-ориентированное программирование: учебное пособие / В. Н. Казагачев.

Для любого типа Т, скажем int, Spouse(Person<int>&) - функция, дружественная Person<int>, но не Person<char>, или любому другому типу. Spouse(Person<int>&) Person<int> Spouse(Person<char>&) Person<char> Spouse(Person<float>&) Person<float> Coworker(U &) - функция, дружественная Person<T>, для любого типа Т и любого типа U. Coworker(int&) Person<int> Coworker(char&) Peson<char> Coworker(float&) Person<float> Дружественные функции могут быть функциями-членами другого класса. template<class Т> class Perosn { freind void Family::SibildingO; freind void Acquaintance::Casual(Person &); template<class U>friend void Neighbor<U>::Nextdoor(U&); }; Здесь Family::SibildingO - фукнция, дружественная Person<T>, для каждого типа Т. Для любого типа Т, скажем для int, Acquaintance<int>::Causal(Person<int>&) - функция, дружественная Person<int>, но не Person<char>, или любому другому типу. Neighbor<U>::NextDoor(U&) -функция, дружественная Person<T>, для любого типа U. Дружкственные функции могут быть объявлены для всего класса. template<class T>class Person { friend class Family; freind class Acquaintance; template<class U> freind class Neighbor; }; Здесь для каждого типа Т все функции-члены класса Family - это функции, дружественные Person<T>. Для любого типа, скажем для int, все функции-члены класса Acquaintance<int> являются друзьями

RkJQdWJsaXNoZXIy MTExODQxMg==