Definition
friend Nonmember Functions
A class give a nonmember function (or class) access to its nonpublic members by declaring it as a friend within its definition
- friend function is not a class member, but has access privileges as if it were
- friend functions are usually unnecessary if your class includes appropriate “getter” public functions

When to use nonmember and friend
- Member Functions:
- Operators that modify the object being called on
- Assignment operator (operator =)
- “Core” non-operator functionality that is part of the class interface
- Nonmember Functions:
- Used for commutative operators
- e.g., so v1 + v2 is invoked as operators+(v1, v2) instead