A trieda priateľov má prístup k súkromným a chráneným členom iných tried, v ktorých je deklarovaný ako priateľ. Niekedy je užitočné povoliť určitej triede prístup k súkromným a chráneným členom iných tried. Napríklad triede LinkedList môže byť povolený prístup k súkromným členom Node.
Môžeme deklarovať priateľskú triedu v C++ pomocou priateľ kľúčové slovo.
Syntax:
friend class class_name; // declared in the base class>

Priateľská trieda
listnode java
Príklad:
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; }> Výkon
The value of Private Variable = 10 The value of Protected Variable = 99>
Poznámka: Môžeme deklarovať priateľskú triedu alebo funkciu kdekoľvek v tele základnej triedy, či už ide o súkromný, chránený alebo verejný blok. Funguje to všetko rovnako.
Funkcia priateľa
Podobne ako trieda priateľov, aj funkcii priateľ môže byť udelený špeciálny prístup k súkromným a chráneným členom triedy v C++. Nie sú členskými funkciami triedy, ale môžu pristupovať k súkromným a chráneným členom tejto triedy a manipulovať s nimi, pretože sú deklarovaní ako priatelia.
Funkcia priateľa môže byť:
- Globálna funkcia
- Členská funkcia inej triedy

Funkcia priateľa v C++
Syntax:
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>

Syntax funkcie priateľa
anotácie v jarných topánkach
1. Globálna funkcia ako funkcia priateľa
Za funkciu priateľa môžeme deklarovať akúkoľvek globálnu funkciu. Nasledujúci príklad ukazuje, ako deklarovať globálnu funkciu ako funkciu priateľa v C++:
Príklad:
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; }> Výkon
Private Variable: 10 Protected Variable: 99>
Vo vyššie uvedenom príklade sme použili globálnu funkciu ako funkciu priateľa. V ďalšom príklade použijeme členskú funkciu inej triedy ako funkciu priateľa.
2. Členská funkcia inej triedy ako funkcia priateľa
Členskú funkciu inej triedy môžeme deklarovať aj ako funkciu priateľa v C++. Nasledujúci príklad ukazuje, ako použiť členskú funkciu inej triedy ako funkciu priateľa v C++:
Príklad:
pivot pandyC++
// 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; }> Výkon
Private Variable: 10 Protected Variable: 99>
Poznámka : Poradie, v ktorom definujeme funkciu priateľa inej triedy, je dôležité a malo by sa oň dbať. Pred definíciou funkcie musíme vždy definovať obe triedy. Preto sme použili definíciu funkcie člena mimo triedy.
Vlastnosti funkcií priateľov
- Funkcia priateľa je špeciálna funkcia v C++, na ktorú má privilégium aj napriek tomu, že nie je členskou funkciou triedy prístup a súkromné a chránené údaje triedy.
- Priateľská funkcia je nečlenská funkcia alebo bežná funkcia triedy, ktorá je deklarovaná ako priateľ pomocou kľúčového slova priateľ vnútri triedy. Vyhlásením funkcie za priateľa sú funkcii udelené všetky prístupové povolenia.
- Kľúčové slovo priateľ je umiestnené iba vo deklarácii funkcie funkcie priateľ a nie v definícia funkcie alebo volanie.
- Funkcia priateľa sa nazýva ako bežná funkcia. Nedá sa volať pomocou názvu objektu a operátora bodky. Môže však prijať objekt ako argument, ktorého hodnotu chce získať.
- Funkcia priateľa môže byť deklarovaná v ktorejkoľvek sekcii triedy, tj verejná alebo súkromná alebo chránená.
Nižšie sú uvedené niektoré ďalšie príklady funkcií priateľov v rôznych scenároch:
Funkcia priateľská k viacerým triedam
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; }> Výkon
35>
Funkcia priateľov nám poskytuje spôsob prístupu k súkromným údajom, ale má aj svoje nevýhody. Nasleduje zoznam výhod a nevýhod funkcií priateľov v C++:
Výhody funkcií priateľov
- Funkcia priateľa je schopná pristupovať k členom bez potreby dedenia triedy.
- Funkcia priateľ funguje ako most medzi dvoma triedami prístupom k ich súkromným údajom.
- Môže sa použiť na zvýšenie všestrannosti preťažených operátorov.
- Môže byť deklarovaný buď vo verejnej alebo súkromnej alebo chránenej časti triedy.
Nevýhody funkcií priateľov
- Funkcie priateľov majú prístup k súkromným členom triedy mimo triedy, čo porušuje zákon o ukrývaní údajov.
- Funkcie priateľov nemôžu vo svojich členoch vykonávať žiadny polymorfizmus za behu.
Dôležité body o funkciách a triedach priateľov
- Priatelia by sa mali používať iba na obmedzené účely. Príliš veľa funkcií alebo externých tried je deklarovaných ako priateľov triedy s chráneným alebo súkromným prístupom k údajom, čo znižuje hodnotu zapuzdrenia samostatných tried v objektovo orientovanom programovaní.
- Priateľstvo je nie vzájomné . Ak je trieda A priateľom B, potom B sa automaticky nestáva priateľom A.
- Priateľstvo sa nededí. (Pozri toto pre viac detailov)
- Koncept priateľov nie je v Jave.