Friend Function vs Friend Class: C++ Access Control Explained
A friend function is a standalone function granted private access to a class. A friend class is an entire class that receives the same VIP pass to another class’s internals. Both break the encapsulation wall on purpose.
Imagine a hotel: the night guard (friend function) can open any suite once, while housekeeping (friend class) keeps a master key. Devs often confuse the two because both use the keyword friend, so they wonder if the key is a person or a whole department.
Key Differences
Friend function: single, non-member, can be selective. Friend class: every member of the second class gains access, no cherry-picking. One key vs master key.
Which One Should You Choose?
Need just one routine, like operator<< for logging? Pick friend function. Building a test harness or tightly coupled subsystem? Friend class saves boilerplate and keeps friendship symmetrical.
Examples and Daily Life
Matrix * Vector multiplication can be a friend function for speed. A Serializer class may be a friend class to persist private GameState data without getters everywhere.
Can a friend class be revoked later?
No. Friendship is permanent unless you edit the source and recompile.
Does friendship inherit?
No. Derived classes don’t gain the friend status of their parents.