Разница между friend-функциями и классами в C++ заключается в том, что для функций доступ к закрытым членам имеет только одна конкретная функция, а для классов — весь класс и все его функции. 1
Дружественные функции — это функции, которые не являются членами класса, однако имеют доступ к его закрытым членам — переменным и функциям, которые имеют спецификатор private. 2 Для определения дружественных функций используется ключевое слово friend. 2
Дружественный класс — это класс, члены которого имеют доступ к закрытым или защищенным членам другого класса. 3 Когда класс объявляется дружественным, все функции-члены этого класса становятся дружественными. 5
Таким образом, для функций доступ к закрытым членам имеет только одна конкретная функция, а для классов — весь класс и все его функции. 1