friend functions c
Získajte viac informácií o funkciách priateľov v C ++ pomocou príkladov.
C ++ podporuje funkciu zapuzdrenia, pri ktorej sú údaje spojené s funkciami na nich pracujúcimi, aby vytvorili jednu jednotku. Týmto spôsobom C ++ zaisťuje, že k údajom majú prístup iba funkcie na ňom pôsobiace a nie ktokoľvek mimo triedy.
Toto je jeden z charakteristických prvkov jazyka C ++, ktorý uchováva údaje a zabraňuje ich úniku do vonkajšieho sveta.
=> Prečítajte si sériu školení Easy C ++.
V niektorých aplikáciách v reálnom čase však niekedy môžeme chcieť získať prístup k údajom mimo priloženej jednotky. Napríklad trieda outsiderov môže chcieť získať prístup k súkromným a chráneným údajom triedy C ++.
C ++ poskytuje nástroj na prístup k súkromným a chráneným údajom pomocou špeciálnej funkcie nazývanej funkcia „priateľ“ alebo trieda, o ktorej si tu v tomto výučbe povieme.
Čo sa dozviete:
- Funkcia priateľa v C ++
- Príklad funkcie priateľa
- Priateľská trieda
- Výhody / nevýhody funkcie priateľa
- Záver
- Odporúčané čítanie
Funkcia priateľa v C ++
Funkcia friend v C ++ je funkcia, ktorej predchádza kľúčové slovo „friend“. Keď je funkcia deklarovaná ako priateľ, môže získať prístup k súkromným a chráneným dátovým členom triedy.
Funkcia friend je v triede deklarovaná pomocou kľúčového slova friend, ktoré je zobrazené nižšie.
class className{ …… friend returnType functionName(arg list); };
Ako je uvedené vyššie, funkcia friend je deklarovaná vo vnútri triedy, ku ktorej súkromným a chráneným údajovým členom sa má pristupovať. Funkciu je možné definovať kdekoľvek v súbore kódu a nemusíme používať kľúčové slovo priateľ alebo operátor rozlíšenia rozsahu.
Pri implementácii funkcií priateľstva do nášho programu si treba pamätať niekoľko bodov:
- Funkciu priateľa je možné deklarovať v súkromnej alebo verejnej časti triedy.
- Dá sa to nazvať ako normálna funkcia bez použitia objektu.
- Funkcia friend nie je v rozsahu triedy, ktorej je priateľom.
- Funkcia friend nie je vyvolaná pomocou objektu triedy, pretože nie je v rozsahu triedy.
- Funkcia priateľ nemôže získať priamy prístup k súkromným a chráneným údajovým členom triedy. Potrebuje využiť objekt triedy a potom pristupovať k členom pomocou bodkového operátora.
- Funkciou priateľa môže byť globálna funkcia alebo člen inej triedy.
Príklad funkcie priateľa
Implementujme programovací príklad, aby sme lepšie pochopili použitie funkcie Friend.
#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 = '< Výkon:
Plocha = 150
Vo vyššie uvedenom programe máme ukážku triedy s dĺžkou a šírkou súkromných členov. Máme verejného konštruktora, ktorý inicializuje hodnoty dĺžky a šírky. Ďalej máme funkciu priateľa „calcArea“, ktorá počíta plochu tak, že berie do úvahy dĺžku a šírku.
Upozorňujeme, že calcArea je funkcia priateľa a nie je súčasťou triedy. V hlavnej funkcii po vytvorení objektu vzorky triedy ho odovzdáme funkcii calcArea, ktorá počíta plochu a zobrazuje hodnotu.
Priateľská trieda
Rovnako ako funkcie priateľov môžeme mať aj triedu priateľov. Trieda priateľa má prístup k súkromným a chráneným členom triedy, ktorej je priateľom.
class A{ …… friend class B; }; class B{ …….. };
Ako je uvedené vyššie, trieda B je priateľom triedy A. Takže trieda B má prístup k súkromným a chráneným členom triedy A.
To ale neznamená, že trieda A má prístup k súkromným a chráneným členom triedy B. Upozorňujeme, že priateľstvo nie je vzájomné, pokiaľ to neurobíme.
Rovnako sa nezdedí ani priateľstvo triedy. To znamená, že keďže trieda B je priateľom triedy A, nebude priateľom v podtriedach triedy A.
Vezmime si príklad programovania, aby sme predviedli triedu priateľov.
#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 = '< Výkon:
Plocha = 150
náhradný streamovací film pre film 4k
V tomto programe máme dve triedy. Trieda „Plocha“, ktorá počíta oblasť pomocou parametrov dĺžky a šírky. Upozorňujeme, že polia, oblasť, dĺžka a šírka sú všetci súkromní členovia triedy Area.
Ďalšou použitou triedou je „printClass“, ktorá vytlačí plochu vypočítanú funkciou calcArea v triede Area. Pretože členovia sú súkromní, musíme si z printClass urobiť priateľa triedy Area.
Keď je to hotové, v hlavnej funkcii vytvoríme objekt triedy Area, vypočítame plochu a odovzdáme objekt funkcii printArea triedy printClass, aby sa oblasť zobrazila.
Výhody / nevýhody funkcie priateľa
Jednou z výhod priateľskej funkcie alebo triedy je, že môžeme pristupovať k súkromným a chráneným údajom triedy. Napríklad, ak implementujeme prepojený zoznam, potom môžeme vytvoriť triedu prepojeného zoznamu ako priateľa triedy uzlov a pristupovať k jej údajom, pretože prepojený zoznam sa skladá z uzlov.
V určitej situácii sa teda použitie funkcie priateľa alebo triedy môže ukázať ako výhodné. Má však aj určité nevýhody.
Jedným z charakteristických znakov C ++ je zapuzdrenie, t. J. Zväzok údajov a funkcií pracujúcich na týchto údajoch dohromady, takže k údajom nemôže mať prístup žiadna vonkajšia funkcia alebo trieda. Ale tým, že sme umožnili priateľským funkciám alebo triede prístup k súkromným členom inej triedy, sme v skutočnosti kompromitovali funkciu zapuzdrenia.
Aby sme tomu zabránili, mali by sme byť opatrní pri používaní funkcií alebo triedy priateľa. Mali by sme sa ubezpečiť, že by sme v našom programe nemali používať príliš veľa funkcií a tried priateľa, čo by úplne kompromitovalo zapuzdrenie.
Záver
Týmto sa končí náš návod na prácu s priateľmi a na triedy v C ++.
Čitatelia musia byť pri používaní tried a funkcií priateľa veľmi opatrní, pretože to môže byť pre programátora prínosom, je tiež potrebné ich používať opatrne, pretože nadmerné používanie funkcií a tried priateľa môže narušiť OOP funkciu zapuzdrenia v našom programe.
V našom pripravovanom výučbe sa podrobne dozvieme o statických funkciách v jazyku C ++.
=> Navštívte tu a naučte sa C ++ od nuly.
Odporúčané čítanie