Friend functions in C++ are granted special access to the private and protected members of the class they befriend. This breaks normal encapsulation rules when needed. Friend functions are commonly used for operator overloading and when external functions need deep class access. They do not access public members differently than any other function.