A friend declaration is essentially a prototype for a member function, but instead of requiring an implementation with the name of that class attached by the double colon syntax, a global function or member function of another class provides the match.
class mylinkage { private: mylinkage * prev; mylinkage * next; protected: friend void set_prev(mylinkage* L, mylinkage* N); void set_next(mylinkage* L); public: mylinkage * succ(); mylinkage * pred(); mylinkage(); }; void mylinkage::set_next(mylinkage* L) { next = L; } void set_prev(mylinkage * L, mylinkage * N ) { N->prev = L; }
class C { friend int B::f1(); }; class B { int f1(); };It is also possible to specify all the functions in another class as friends, by specifying the entire class as a friend.
class A { friend class B; };
Friend functions allow binary operators to be defined which combine private data in a pair of objects. This is particularly powerful when using the operator overloading features of C++. We will return to it when we look at overloading.