friend functions c
Aflați mai multe despre funcțiile prietenilor în C ++ cu exemple.
C ++ acceptă caracteristica încapsulării în care datele sunt grupate împreună cu funcțiile care operează pe ea pentru a forma o singură unitate. Făcând acest lucru, C ++ se asigură că datele sunt accesibile numai de funcțiile care operează pe acesta și nu pentru nimeni din afara clasei.
Aceasta este una dintre caracteristicile distinctive ale C ++ care păstrează datele și împiedică scurgerea acestora în lumea exterioară.
=> Citiți seria Easy C ++ Training.
Dar, în unele aplicații în timp real, uneori am putea dori să accesăm date în afara unității incluse. De exemplu, o clasă externă ar putea dori să acceseze datele private și protejate ale unei clase C ++.
C ++ oferă o facilitate pentru accesarea datelor private și protejate prin intermediul unei caracteristici speciale numite funcție sau clasă „prieten” despre care vom discuta aici în acest tutorial.
Ce veți învăța:
- Funcția prieten în C ++
- Exemplu de funcție de prieten
- Clasa prietenilor
- Avantajele / Dezavantajele funcției prieten
- Concluzie
- Lectură recomandată
Funcția prieten în C ++
O funcție de prieten în C ++ este o funcție care este precedată de cuvântul cheie „prieten”. Când funcția este declarată ca prieten, atunci poate accesa datele private și protejate membrii clasei.
O funcție prieten este declarată în cadrul clasei cu un cuvânt cheie prieten precedând așa cum se arată mai jos.
class className{ …… friend returnType functionName(arg list); };
După cum se arată mai sus, funcția prieten este declarată în cadrul clasei ai cărei membri de date private și protejate urmează să fie accesate. Funcția poate fi definită oriunde în fișierul de cod și nu trebuie să folosim cuvântul cheie prieten sau rezoluția scopului, operator.
Există câteva puncte de reținut în timpul implementării funcțiilor prieten în programul nostru:
- O funcție de prietenie poate fi declarată în secțiunea privată sau publică a clasei.
- Poate fi numit ca o funcție normală fără a utiliza obiectul.
- O funcție de prieten nu se află în sfera clasei, de care este prieten.
- O funcție prieten nu este invocată folosind obiectul clasei, deoarece nu se află în sfera clasei.
- O funcție de prieten nu poate accesa direct datele private și protejate ale clasei. Trebuie să utilizeze un obiect de clasă și apoi să acceseze membrii folosind operatorul punct.
- O funcție de prieten poate fi o funcție globală sau un membru al altei clase.
Exemplu de funcție de prieten
Să implementăm un exemplu de programare pentru a înțelege mai bine utilizarea funcției prieten.
#include #include using namespace std; class sample{ int length, breadth; public: sample(int length, int breadth):length(length),breadth(breadth) {} friend void calcArea(sample s); //friend function declaration }; //friend function definition void calcArea(sample s){ cout<<'Area = '< Ieșire:
Suprafață = 150
În programul de mai sus, avem un eșantion de clasă cu lungimea și lățimea membrilor privați. Avem un constructor public care inițializează valorile lungimii și lățimii. Apoi, avem o funcție de prieten „calcArea” care calculează aria luând în considerare lungimea și lățimea.
Rețineți că calcArea este o funcție de prieten și nu face parte din clasă. În funcția principală, după crearea unui obiect din eșantionul clasei, îl trecem la funcția calcArea care calculează suprafața și afișează valoarea.
Clasa prietenilor
La fel ca funcțiile de prieten, putem avea și o clasă de prieteni. Clasa de prieteni poate accesa membrii privați și protejați ai clasei la care este prieten.
class A{ …… friend class B; }; class B{ …….. };
După cum este descris mai sus, clasa B este un prieten al clasei A. Deci, clasa B poate accesa membrii privați și protejați ai clasei A.
Dar asta nu înseamnă că clasa A poate accesa membrii privați și protejați ai clasei B. Rețineți că prietenia nu este reciprocă decât dacă o facem astfel.
În mod similar, prietenia clasei nu este moștenită. Aceasta înseamnă că, întrucât clasa B este un prieten al clasei A, nu va fi un prieten al subclaselor clasei A.
Să luăm un exemplu de programare pentru a demonstra clasa prietenilor.
#include #include using namespace std; class Area{ int length,breadth,area; public: Area(int length,int breadth):length(length),breadth(breadth) {} void calcArea(){ area = length * breadth; } friend class printClass; }; class printClass{ public: void printArea(Area a){ cout<<'Area = '< Ieșire:
Suprafață = 150
selectarea sortării în c ++
În acest program, avem două clase. Clasa „Zona” care calculează aria utilizând parametrii de lungime și lățime. Rețineți că câmpurile, suprafața, lungimea și lățimea sunt toate membre private ale zonei clasei.
Următoarea clasă care este utilizată este „printClass” care tipărește aria calculată de o funcție calcArea din clasa Area. Deoarece membrii sunt privați, trebuie să facem din PrintClass un prieten al clasei Area.
Odată ce ați făcut acest lucru, în funcția principală creăm un obiect din clasa Area, calculăm aria și trecem obiectul la funcția printArea din clasa printClass pentru a afișa zona.
Avantajele / Dezavantajele funcției prieten
Un avantaj al funcției sau clasei de prietenie este că putem accesa datele private și protejate ale clasei. De exemplu, dacă implementăm o listă legată, atunci putem face clasa listă legată ca prieten al clasei nodurilor și să accesăm datele acesteia deoarece lista legată este formată din noduri.
Astfel, într-o anumită situație, utilizarea unei funcții sau a unei clase de prieten se poate dovedi avantajoasă. Cu toate acestea, are și unele dezavantaje.
Una dintre caracteristicile distinctive ale C ++ este încapsularea, adică gruparea de date și funcții care operează pe acele date împreună, astfel încât nicio funcție sau clasă externă să nu poată accesa datele. Dar, permițând funcțiilor sau clasei de prieteni să acceseze membrii privați ai altei clase, compromitem de fapt caracteristica de încapsulare.
Pentru a preveni acest lucru, ar trebui să fim atenți la utilizarea funcțiilor de prietenie sau a clasei. Ar trebui să ne asigurăm că nu ar trebui să folosim prea multe funcții și clase de prieteni în programul nostru, ceea ce va compromite total încapsularea.
Concluzie
Aceasta încheie tutorialul nostru despre funcția de prieten și cursurile în C ++.
Cititorii trebuie să fie foarte precauți în timp ce utilizează clasele și funcțiile de prietenie ca și cum ar putea acționa ca un avantaj pentru programator, trebuie, de asemenea, să fie utilizat cu prudență, deoarece utilizarea excesivă a funcțiilor și claselor de prieteni poate compromite caracteristica OOP a încapsulării în programul nostru.
În viitorul nostru tutorial, vom afla în detaliu despre funcțiile statice în C ++.
=> Vizitați aici pentru a afla C ++ de la zero.
Lectură recomandată