logo

Priateľská trieda a funkcia v C++

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ť:



  1. Globálna funkcia
  2. Členská funkcia inej triedy
Funkcia priateľa v C++ s príkladom

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

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 pandy
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; }>

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

  1. 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í.
  2. Priateľstvo je nie vzájomné . Ak je trieda A priateľom B, potom B sa automaticky nestáva priateľom A.
  3. Priateľstvo sa nededí. (Pozri toto pre viac detailov)
  4. Koncept priateľov nie je v Jave.