friend functions c
Spoznajte več o prijateljskih funkcijah v jeziku C ++ s primeri.
C ++ podpira funkcijo enkapsulacije, pri kateri se podatki združijo skupaj s funkcijami, ki delujejo na njem, da tvorijo eno enoto. S tem C ++ zagotavlja, da so podatki dostopni samo funkcijam, ki delujejo na njem, in ne nikomur zunaj razreda.
To je ena od značilnosti C ++, ki ohranja podatke in preprečuje njihovo uhajanje v zunanji svet.
=> Preberite serijo Easy C ++ Training Series.
Toda v nekaterih aplikacijah v realnem času bomo včasih morda želeli dostopati do podatkov zunaj priložene enote. Na primer, zunanji razred bo morda želel dostopati do zasebnih in zaščitenih podatkov razreda C ++.
C ++ ponuja možnost dostopa do zasebnih in zaščitenih podatkov s pomočjo posebne funkcije, imenovane 'prijatelj', ali funkcije, o kateri bomo razpravljali tukaj v tej vadnici.
Kaj se boste naučili:
- Funkcija prijatelja v jeziku C ++
- Primer prijateljske funkcije
- Razred prijateljev
- Prednosti / slabosti prijateljske funkcije
- Zaključek
- Priporočeno branje
Funkcija prijatelja v jeziku C ++
Funkcija prijatelja v jeziku C ++ je funkcija, pred katero je ključna beseda 'prijatelj'. Ko je funkcija prijavljena kot prijatelj, lahko dostopa do zasebnih in zaščitenih podatkovnih članov razreda.
Funkcija prijatelja je znotraj razreda razglašena s ključno besedo prijatelj, kot je prikazano spodaj.
class className{ …… friend returnType functionName(arg list); };
Kot je prikazano zgoraj, je funkcija prijatelja prijavljena znotraj razreda, do katerega je treba dostopati do zasebnih in zaščitenih podatkovnih članov. Funkcijo lahko definirate kjer koli v kodni datoteki, zato nam ni treba uporabiti ključne besede prijatelj ali ločljivosti področja uporabe, operaterja.
Med izvajanjem prijateljskih funkcij v našem programu si je treba zapomniti nekaj točk:
- Prijateljsko funkcijo lahko prijavite v zasebnem ali javnem delu razreda.
- Lahko ga pokličemo kot običajno funkcijo, ne da bi uporabili predmet.
- Prijateljska funkcija ni v obsegu razreda, katerega prijatelj je.
- Funkcija prijatelja se ne prikliče z uporabo predmeta razreda, ker ni v obsegu razreda.
- Funkcija prijatelja ne more neposredno dostopati do zasebnih in zaščitenih podatkovnih članov razreda. Uporabiti mora predmet razreda in nato dostopati do članov s pomočjo operatorja pike.
- Prijateljska funkcija je lahko globalna funkcija ali član drugega razreda.
Primer prijateljske funkcije
Uvedimo primer programiranja, da bomo bolje razumeli uporabo funkcije prijatelja.
#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 = '< Izhod:
Površina = 150
V zgornjem programu imamo vzorec razreda z zasebnimi člani po dolžini in širini. Imamo javni konstruktor, ki inicializira vrednosti dolžine in širine. Nato imamo funkcijo prijatelja »calcArea«, ki izračuna površino z upoštevanjem dolžine in širine.
Upoštevajte, da je calcArea funkcija prijatelja in ni del razreda. V glavni funkciji ga po ustvarjanju predmeta vzorca razreda prenesemo v funkcijo calcArea, ki izračuna površino in prikaže vrednost.
Razred prijateljev
Tako kot prijateljske funkcije imamo lahko tudi tečaj prijateljev. Prijateljski razred lahko dostopa do zasebnih in zaščitenih članov razreda, kateremu je prijatelj.
class A{ …… friend class B; }; class B{ …….. };
Kot je prikazano zgoraj, je razred B prijatelj razreda A. Torej lahko razred B dostopa do zasebnih in zaščitenih članov razreda A.
Toda to ne pomeni, da lahko razred A dostopa do zasebnih in zaščitenih članov razreda B. Upoštevajte, da prijateljstvo ni vzajemno, če tega ne naredimo.
Podobno tudi prijateljstvo razreda ni podedovano. To pomeni, da ker je razred B prijatelj razreda A, ne bo prijatelj podrazredov razreda A.
Vzemimo primer programiranja za prikaz razreda prijateljev.
#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 = '< Izhod:
Površina = 150
odprta koda orodja za pregled git
V tem programu imamo dva predavanja. Razred 'Območje', ki izračuna površino z uporabo parametrov dolžine in širine. Upoštevajte, da so polja, območje, dolžina in širina vsi zasebni člani razreda Area.
Naslednji uporabljeni razred je 'printClass', ki natisne površino, izračunano s funkcijo calcArea v razredu Area. Ker so člani zasebni, moramo printClass narediti za prijatelja razreda Area.
Ko je to storjeno, v glavni funkciji ustvarimo objekt razreda Area, izračunamo površino in predmet posredujemo funkciji printArea razreda printClass za prikaz območja.
Prednosti / slabosti prijateljske funkcije
Prednost funkcije ali razreda prijatelja je, da lahko dostopamo do zasebnih in zaščitenih podatkov razreda. Na primer, če izvajamo povezani seznam, lahko razred povezanega seznama naredimo kot prijatelja razreda vozlišč in dostopamo do njegovih podatkov, saj je povezan seznam sestavljen iz vozlišč.
Tako se lahko v določeni situaciji izkaže, da je uporaba funkcije prijatelja ali razreda koristna. Ima pa tudi nekaj slabosti.
Ena od značilnosti C ++ je enkapsulacija, tj. Združevanje podatkov in funkcij, ki delujejo na teh podatkih, tako da nobena zunanja funkcija ali razred ne more dostopati do podatkov. Toda če omogočimo prijateljem ali razredu dostop do zasebnih članov drugega razreda, dejansko ogrožamo funkcijo inkapsulacije.
Da bi to preprečili, moramo biti previdni pri uporabi prijateljskih funkcij ali razreda. Zagotoviti moramo, da v našem programu ne uporabljamo preveč prijateljskih funkcij in razredov, ki bodo popolnoma ogrozili enkapsulacijo.
Zaključek
S tem smo zaključili našo vadnico o funkciji prijateljev in razredih v jeziku C ++.
Bralci morajo biti pri uporabi razredov in funkcij prijateljev zelo previdni, saj lahko deluje kot blagodejno za programerja, prav tako pa ga je treba uporabljati previdno, saj prekomerna uporaba funkcij in razredov prijateljev lahko ogrozi funkcijo OOP inkapsulacije v našem programu.
V naši prihajajoči vadnici bomo podrobno spoznali statične funkcije v jeziku C ++.
=> Obiščite tukaj, če se želite naučiti C ++ iz nič.
Priporočeno branje