В C++ дружественная функция — это функция, объявленная с ключевым словом friend
в теле класса, но определенная вне класса. Дружественные функции не являются функциями-членами класса, но они имеют доступ к закрытым и защищенным членам класса.
Объявление функции другом позволяет функции получить доступ к закрытым и защищенным членам класса. Это часто используется, чтобы позволить функции выполнять операции над классом, которые в противном случае были бы запрещены элементами управления доступом класса.
Вот пример класса с функцией друга:
class MyClass { private: int x; friend void myFriendFunction(MyClass& obj); }; void myFriendFunction(MyClass& obj) { // Access the private members of obj obj.x = 10; }
Дружественный класс — это класс, объявленный с ключевым словом friend
в теле класса другого класса. Подобно дружественным функциям, дружественные классы не являются членами класса, в котором они объявлены, но они имеют доступ к закрытым и защищенным членам класса.
Вот пример класса с классом друга:
class MyClass { private: int x; friend class MyFriendClass; }; class MyFriendClass { public: void doSomething(MyClass& obj) { // Access the private members of obj obj.x = 10; } };
Дружба не транзитивна. Например, если класс B
является другом класса A
, а класс C
является другом класса B
, класс C
не становится автоматически другом класса A
. Дружба должна быть явно объявлена в каждом классе.