friend functions c
Saznajte više o prijateljskim funkcijama na C ++ s primjerima.
C ++ podržava značajku enkapsulacije u kojoj se podaci grupiraju zajedno s funkcijama koje djeluju na njemu da bi stvorili jednu jedinicu. Na taj način C ++ osigurava da su podaci dostupni samo funkcijama koje na njemu rade, a ne nikome izvan klase.
To je jedna od prepoznatljivih značajki C ++-a koja čuva podatke i sprječava njihovo curenje u vanjski svijet.
=> Pročitajte seriju Easy C ++ Training Series.
Ali u nekim aplikacijama u stvarnom vremenu ponekad bismo mogli htjeti pristupiti podacima izvan priložene jedinice. Na primjer, autsajderska klasa možda želi pristupiti privatnim i zaštićenim podacima klase C ++.
C ++ pruža mogućnost pristupa privatnim i zaštićenim podacima pomoću posebne značajke nazvane 'prijatelj' funkcija ili klasa o kojoj ćemo ovdje raspravljati u ovom vodiču.
Što ćete naučiti:
- Funkcija prijatelja u C ++
- Primjer prijateljske funkcije
- Razred prijatelja
- Prednosti / nedostaci prijateljske funkcije
- Zaključak
- Preporučena literatura
Funkcija prijatelja u C ++
Funkcija prijatelja na C ++ je funkcija kojoj prethodi ključna riječ 'prijatelj'. Kad je funkcija deklarirana kao prijatelj, tada može pristupiti privatnim i zaštićenim članovima podataka klase.
Funkcija prijatelja deklarira se unutar klase s ključnom riječi prijatelj ispred koje je prikazano dolje.
class className{ …… friend returnType functionName(arg list); };
Kao što je gore prikazano, funkcija prijatelja deklarirana je unutar klase čijim se privatnim i zaštićenim članovima podataka treba pristupiti. Funkcija se može definirati bilo gdje u datoteci koda i ne trebamo koristiti ključnu riječ friend ili opseg rezolucije, operator.
Treba implementirati funkcije prijatelja u naš program na neke točke:
- Funkcija prijatelja može se prijaviti u privatnom ili javnom dijelu razreda.
- Može se nazvati kao normalna funkcija bez upotrebe objekta.
- Funkcija prijatelja nije u opsegu klase kojoj je prijatelj.
- Funkcija prijatelja ne poziva se pomoću objekta klase jer nije u opsegu klase.
- Funkcija prijatelja ne može izravno pristupiti privatnim i zaštićenim podacima članova klase. Treba iskoristiti objekt klase, a zatim pristupiti članovima pomoću operatora točke.
- Funkcija prijatelja može biti globalna funkcija ili član druge klase.
Primjer prijateljske funkcije
Primijenimo primjer programiranja kako bismo bolje razumjeli upotrebu 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 = '< Izlaz:
Površina = 150
U gore navedenom programu imamo uzorak klase s privatnim članovima dužine i širine. Imamo javni konstruktor koji inicijalizira vrijednosti duljine i širine. Dalje, imamo funkciju prijatelja „calcArea“ koja izračunava površinu uzimajući u obzir duljinu i širinu.
Imajte na umu da je calcArea funkcija prijatelja i nije dio klase. U glavnoj funkciji, nakon stvaranja objekta uzorka klase, prosljeđujemo ga funkciji calcArea koja izračunava površinu i prikazuje vrijednost.
Razred prijatelja
Baš kao i funkcije prijatelja, možemo imati i tečaj prijatelja. Razred prijatelja može pristupiti privatnim i zaštićenim članovima razreda kojem je prijatelj.
class A{ …… friend class B; }; class B{ …….. };
Kao što je prikazano gore, razred B prijatelj je razreda A. Dakle, razred B može pristupiti privatnim i zaštićenim članovima razreda A.
Ali to ne znači da klasa A može pristupiti privatnim i zaštićenim članovima klase B. Imajte na umu da prijateljstvo nije obostrano ako to ne učinimo.
Slično tome, prijateljstvo razreda se ne nasljeđuje. To znači da kako je razred B prijatelj razreda A, neće biti prijatelj podrazreda razreda A.
Uzmimo programski primjer da pokažemo razred prijatelja.
#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 = '< Izlaz:
Površina = 150
c ++ kako koristiti stringstream
U ovom programu imamo dva razreda. Klasa 'Područje' koja izračunava površinu pomoću parametara duljine i širine. Imajte na umu da su polja, površina, dužina i širina privatni članovi klase Area.
Sljedeća klasa koja se koristi je 'printClass' koja ispisuje područje izračunato funkcijom calcArea u klasi Area. Kako su članovi privatni, printClass moramo učiniti prijateljem klase Area.
Kada je to gotovo, u glavnoj funkciji kreiramo objekt klase Area, izračunavamo površinu i prosljeđujemo objekt funkciji printArea klase printClass za prikaz površine.
Prednosti / nedostaci prijateljske funkcije
Jedna od prednosti funkcije prijatelja ili klase je što možemo pristupiti privatnim i zaštićenim podacima klase. Na primjer, ako implementiramo povezani popis, tada možemo povezati klasu popisa kao prijatelja klase čvorova i pristupiti njezinim podacima jer se povezani popis sastoji od čvorova.
Stoga se u određenoj situaciji korištenje funkcije prijatelja ili klase može pokazati korisnim. Međutim, ima i nekih nedostataka.
Jedna od prepoznatljivih značajki C ++-a je enkapsulacija, tj. Grupiranje podataka i funkcija koje rade na tim podacima zajedno, tako da niti jedna vanjska funkcija ili klasa ne može pristupiti podacima. No dopuštajući prijateljskim funkcijama ili klasi pristup privatnim članovima druge klase, zapravo ugrožavamo značajku enkapsulacije.
Da bismo to spriječili, trebali bismo biti oprezni pri korištenju funkcija prijatelja ili klase. Morali bismo osigurati da ne bismo trebali koristiti previše funkcija prijatelja i klasa u našem programu što će totalno ugroziti enkapsulaciju.
Zaključak
Ovim je završen naš vodič o funkciji prijatelja i predavanjima na C ++.
Čitatelji moraju biti vrlo oprezni dok koriste klase prijatelja i funkcije, kao da to može djelovati kao blagodat za programera, također ga treba koristiti oprezno, jer prekomjerno korištenje funkcija prijatelja i klasa može ugroziti OOP značajku enkapsulacije u našem programu.
U našem nadolazećem uputstvu detaljno ćemo naučiti o statičkim funkcijama u C ++-u.
=> Posjetite ovdje da biste C ++ naučili od nule.
Preporučena literatura