logo

Draugu klase un funkcija C++ valodā

A draugu klase var piekļūt privātiem un aizsargātiem citu klašu dalībniekiem, kurās tas ir deklarēts kā draugs. Dažreiz ir lietderīgi ļaut noteiktai klasei piekļūt citu klašu privātiem un aizsargātiem dalībniekiem. Piemēram, LinkedList klasei var būt atļauts piekļūt privātiem Node dalībniekiem.

kārtot masīvu sarakstu

Mēs varam deklarēt drauga klasi C++, izmantojot draugs atslēgvārds.

Sintakse:



friend class class_name; // declared in the base class>

Draugu klase


Piemērs:

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

Izvade
The value of Private Variable = 10 The value of Protected Variable = 99>

Piezīme: Mēs varam deklarēt draugu klasi vai funkciju jebkur pamata klases pamattekstā neatkarīgi no tā, vai tas ir privāts, aizsargāts vai publiskais bloks. Tas viss darbojas vienādi.

Drauga funkcija

Tāpat kā draugu klasei, drauga funkcijai var piešķirt īpašu piekļuvi privātiem un aizsargātiem klases dalībniekiem programmā C++. Viņi nav klases dalībnieku funkcijas, bet var piekļūt un manipulēt ar šīs klases privātajiem un aizsargātajiem locekļiem, jo ​​viņi ir deklarēti kā draugi.

Drauga funkcija var būt:

  1. Globāla funkcija
  2. Citas klases dalībnieka funkcija
Drauga funkcija programmā C++ ar piemēru

Drauga funkcija programmā C++

Sintakse:

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>
drauga funkcijas sintakse

Drauga funkcijas sintakse

1. Globālā funkcija kā drauga funkcija

Jebkuru globālo funkciju varam pasludināt par drauga funkciju. Šis piemērs parāda, kā globālo funkciju deklarēt kā drauga funkciju programmā C++:

Piemērs:

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

Izvade
Private Variable: 10 Protected Variable: 99>

Iepriekš minētajā piemērā mēs esam izmantojuši globālo funkciju kā drauga funkciju. Nākamajā piemērā kā drauga funkciju izmantosim citas klases dalībnieka funkciju.

konvertēt virkni int java

2. Citas klases dalībnieka funkcija kā drauga funkcija

Mēs varam arī deklarēt citas klases dalībnieka funkciju kā drauga funkciju programmā C++. Šis piemērs parāda, kā izmantot citas klases dalībnieka funkciju kā drauga funkciju programmā C++:

Piemērs:

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

Izvade
Private Variable: 10 Protected Variable: 99>

Piezīme : Secība, kādā mēs definējam citas klases drauga funkciju, ir svarīga, un par to ir jārūpējas. Pirms funkcijas definīcijas mums vienmēr ir jādefinē abas klases. Tāpēc mēs esam izmantojuši ārpus klases locekļa funkcijas definīciju.

Drauga funkciju iezīmes

  • Drauga funkcija ir īpaša funkcija C++ valodā, kurai, neskatoties uz to, ka tā nav klases dalībnieka funkcija, ir privilēģija piekļuvi uz privāti un aizsargāti dati no klases.
  • Drauga funkcija ir klases funkcija, kas nav biedrs, vai parastā funkcija, kas tiek deklarēta kā draugs, izmantojot atslēgvārdu draugs klases iekšienē. Pasludinot funkciju par draugu, funkcijai tiek piešķirtas visas piekļuves atļaujas.
  • Atslēgvārds draugs tiek ievietots tikai drauga funkcijas un funkcijas deklarācijā iekš funkcijas definīcija vai izsaukums.
  • Drauga funkciju sauc par parastu funkciju. To nevar izsaukt, izmantojot objekta nosaukumu un punktu operatoru. Tomēr tas var pieņemt objektu kā argumentu, kura vērtībai tas vēlas piekļūt.
  • Drauga funkciju var deklarēt jebkurā klases sadaļā, t.i., publiskā, privātā vai aizsargātā.

Tālāk ir sniegti vēl daži draugu funkciju piemēri dažādos scenārijos.

Funkcija, kas piemērota vairākām klasēm

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

Izvade
35>

Funkcija Draugs nodrošina mums iespēju piekļūt privātiem datiem, taču tai ir arī savas priekšrocības. Šis ir C++ draugu funkciju priekšrocību un trūkumu saraksts:

Drauga funkciju priekšrocības

  • Drauga funkcija var piekļūt dalībniekiem bez nepieciešamības mantot klasi.
  • Drauga funkcija darbojas kā tilts starp divām klasēm, piekļūstot viņu privātajiem datiem.
  • To var izmantot, lai palielinātu pārslogotu operatoru daudzpusību.
  • To var deklarēt gan publiskajā, gan privātajā vai aizsargātajā klases daļā.

Drauga funkciju trūkumi

  • Draugu funkcijām ir piekļuve privātiem klases dalībniekiem no ārpuses, kas pārkāpj datu slēpšanas likumu.
  • Draugu funkcijas nevar veikt izpildlaika polimorfismu savos biedros.

Svarīgi punkti par drauga funkcijām un klasēm

  1. Draugus drīkst izmantot tikai ierobežotiem mērķiem. Pārāk daudz funkciju vai ārējo klašu tiek deklarētas kā klases draugi ar aizsargātu vai privātu piekļuvi datiem, kas samazina atsevišķu klašu iekapsulēšanas vērtību objektorientētā programmēšanā.
  2. Draudzība ir nav savstarpēja . Ja A klase ir B draugs, tad B nekļūst par A draugu automātiski.
  3. Draudzība nav iedzimta. (Skat šis lai iegūtu sīkāku informāciju)
  4. Draugu jēdziens Java nav pieejams.