А дружній клас може отримати доступ до приватних і захищених членів інших класів, у яких він оголошений як друг. Іноді корисно дозволити певному класу доступ до приватних і захищених членів інших класів. Наприклад, класу LinkedList може бути дозволено доступ до приватних членів Node.
Ми можемо оголосити клас друга в C++ за допомогою друг ключове слово.
Синтаксис:
friend class class_name; // declared in the base class>

Дружній клас
цикли java
приклад:
C++
// C++ Program to demonstrate the // functioning of a friend class #include using namespace std; class GFG { private: int private_variable; protected: int protected_variable; public: GFG() { private_variable = 10; protected_variable = 99; } // friend class declaration friend class F; }; // Here, class F is declared as a // friend inside class GFG. Therefore, // F is a friend of class GFG. Class F // can access the private members of // class GFG. class F { public: void display(GFG& t) { cout << 'The value of Private Variable = ' << t.private_variable << endl; cout << 'The value of Protected Variable = ' << t.protected_variable; } }; // Driver code int main() { GFG g; F fri; fri.display(g); return 0; }> Вихід
The value of Private Variable = 10 The value of Protected Variable = 99>
Примітка: Ми можемо оголосити дружній клас або функцію будь-де в тілі базового класу, будь то приватний, захищений або публічний блок. Працює все одно.
Функція друга
Подібно до класу друга, функції друга можна надати спеціальний доступ до приватних і захищених членів класу в C++. Вони не є функціями-членами класу, але можуть отримувати доступ і маніпулювати приватними та захищеними членами цього класу, оскільки вони оголошені друзями.
коли починається q2
Функція друга може бути:
- Глобальна функція
- Функція-член іншого класу

Функція друга в C++
Синтаксис:
10 з 60
friend return_type function_name (arguments); // for a global function or friend return_type class_name::function_name (arguments); // for a member function of another class>

Синтаксис функції Friend
1. Глобальна функція як функція друга
Ми можемо оголосити будь-яку глобальну функцію як функцію друга. У наступному прикладі показано, як оголосити глобальну функцію як функцію-друг у C++:
приклад:
C++ // C++ program to create a global function as a friend // function of some class #include using namespace std; class base { private: int private_variable; protected: int protected_variable; public: base() { private_variable = 10; protected_variable = 99; } // friend function declaration friend void friendFunction(base& obj); }; // friend function definition void friendFunction(base& obj) { cout << 'Private Variable: ' << obj.private_variable << endl; cout << 'Protected Variable: ' << obj.protected_variable; } // driver code int main() { base object1; friendFunction(object1); return 0; }> Вихід
Private Variable: 10 Protected Variable: 99>
У наведеному вище прикладі ми використали глобальну функцію як функцію друга. У наступному прикладі ми будемо використовувати функцію-член іншого класу як функцію-друг.
2. Функція-член іншого класу як функція-друг
Ми також можемо оголосити функцію-член іншого класу як функцію-друг у C++. Наступний приклад демонструє, як використовувати функцію-член іншого класу як функцію-друг у C++:
підключення java mysql
приклад:
C++ // C++ program to create a member function of another class // as a friend function #include using namespace std; class base; // forward definition needed // another class in which function is declared class anotherClass { public: void memberFunction(base& obj); }; // base class for which friend is declared class base { private: int private_variable; protected: int protected_variable; public: base() { private_variable = 10; protected_variable = 99; } // friend function declaration friend void anotherClass::memberFunction(base&); }; // friend function definition void anotherClass::memberFunction(base& obj) { cout << 'Private Variable: ' << obj.private_variable << endl; cout << 'Protected Variable: ' << obj.protected_variable; } // driver code int main() { base object1; anotherClass object2; object2.memberFunction(object1); return 0; }> Вихід
Private Variable: 10 Protected Variable: 99>
Примітка : Порядок, у якому ми визначаємо функцію друга для іншого класу, важливий і про нього слід подбати. Ми завжди маємо визначати обидва класи перед визначенням функції. Ось чому ми використали визначення функції-члена класу.
Особливості функцій Friend
- Функція друга — це спеціальна функція в C++, яка, незважаючи на те, що не є функцією-членом класу, має привілей доступу в особисті та захищені дані класу.
- Дружня функція — це функція, що не є членом, або звичайна функція класу, яка оголошується як друга за допомогою ключового слова друг всередині класу. Оголошуючи функцію як друга, усі права доступу надаються функції.
- Ключове слово friend розміщується лише в декларації функції friend і ні в визначення або виклик функції.
- Дружня функція називається як звичайна функція. Його не можна викликати за допомогою імені об’єкта та оператора крапки. Однак він може прийняти об’єкт як аргумент, до значення якого він хоче отримати доступ.
- Функцію друга можна оголосити в будь-якому розділі класу, тобто загальнодоступному, приватному або захищеному.
Нижче наведено ще кілька прикладів функцій друзів у різних сценаріях:
Дружня функція для кількох класів
C++ // C++ Program to demonstrate // how friend functions work as // a bridge between the classes #include using namespace std; // Forward declaration class ABC; class XYZ { int x; public: void set_data(int a) { x = a; } friend void max(XYZ, ABC); }; class ABC { int y; public: void set_data(int a) { y = a; } friend void max(XYZ, ABC); }; void max(XYZ t1, ABC t2) { if (t1.x>t2.y) cout<< t1.x; else cout << t2.y; } // Driver code int main() { ABC _abc; XYZ _xyz; _xyz.set_data(20); _abc.set_data(35); // calling friend function max(_xyz, _abc); return 0; }> Вихід
35>
Функція друга надає нам спосіб доступу до особистих даних, але вона також має свої недоліки. Нижче наведено список переваг і недоліків функцій друзів у C++:
Переваги функцій Friend
- Функція друга може отримати доступ до членів без необхідності успадкування класу.
- Функція друга діє як міст між двома класами, отримуючи доступ до їхніх особистих даних.
- Його можна використовувати для збільшення універсальності перевантажених операторів.
- Він може бути оголошений у публічній, приватній або захищеній частині класу.
Недоліки функцій Friend
- Дружні функції мають доступ до приватних членів класу поза класом, що порушує закон приховування даних.
- Дружні функції не можуть здійснювати поліморфізм під час виконання у своїх членах.
Важливі моменти щодо функцій і класів друзів
- Друзів слід використовувати лише для обмежених цілей. Занадто багато функцій або зовнішніх класів оголошено друзями класу із захищеним або приватним доступом до даних зменшує цінність інкапсуляції окремих класів в об’єктно-орієнтованому програмуванні.
- Дружба є не взаємно . Якщо клас A є другом B, то B не стає другом A автоматично.
- Дружба не передається у спадок. (Побачити це для більш детальної інформації)
- Поняття друзів немає в Java.