“I name my friends”. I’m a class with private fields/methods. I can name another class to be a “friend-class”, so its *instance* can access private members of my *instance*.
Now friend-function — I can also name a function as my friend. The function is identified by the full prototype (including const, return type …). Therefore, when i name the friend function, the syntax looks …..
The access controller treats each function  as an “thingy”, a special thingy in a running process, with its own identity (and address).
Now you can understand that a function can be friend to 2 classes.
 non-member, non-friend functions included, and also overloaded operators
See also http://newdata.box.sk/bx/c/htm/ch15.htm for transfer and inheritance resitrictions