Značajka prijatelja bez obzira koristi li funkcija ili klasa može proizvesti negativan utjecaj na objektno orijentirani okvir jer slabi enkapsulaciju koja je protiv objektno orijentirane paradigme. To je razlog zbog kojeg se značajka prijatelja mora mudro koristiti, inače bi mogla prekinuti skrivanje podataka kodom.
Ova značajka prijatelja nije ni komutativna niti transitivena . X je prijatelj Y i ne zaključuje da je Y prijatelj X-a. Ako je X prijatelj Y-a i Y je prijatelj Z-a, to ne znači da je X prijatelj Z-a.
Tablica usporedbe
Osnova za usporedbu | Funkcija prijatelja | Razred prijatelja |
---|---|---|
Osnovni, temeljni | To je funkcija koja se koristi s ključnom riječi prijatelja za dodjeljivanje pristupa nečlanovima privatnim članovima klase. | To je klasa koja se koristi s ključnom riječi prijatelja za pristup privatnim članovima druge klase. |
Naprijed deklaracija | Mora se koristiti. | Nije obavezno. |
Koristiti | Funkcija prijatelja može se koristiti u nekim situacijama preopterećenja operatora. | Klasa prijatelja može se koristiti kada je klasa stvorena na vrhu druge klase. |
Definicija funkcije prijatelja
Funkcija prijatelja koristi se za pristup privatnim i zaštićenim članovima klase dopuštajući pristup nečlanskoj funkciji. U ovoj vrsti funkcije, ključna riječ prijatelja koristi se prije naziva funkcije u vrijeme deklaracije. Postoje neki restriktivni uvjeti koji se primjenjuju na funkciju prijatelja. Prvi uvjet je da funkcija prijatelja nije naslijedila podređena klasa. Drugi uvjet je da specifikator klase pohrane možda nije prisutan u funkciji prijatelja, što znači da se ne može deklarirati kao statična i vanjska.
Funkcija prijatelja nije pozvana s pozivom na objekt klase. Primjeri funkcije prijatelja su: globalna funkcija, funkcija člana klase, predložak funkcije može biti funkcija prijatelja. Razumimo to uz pomoć primjera.
#include pomoću imena prostora std; prva klasa {int podataka; public: prvo (int i): data (i) {} prijatelj void display (const first & a); }; void prikaz (const first & a) {cout << "data =" <Definicija klase prijatelja
Slično funkciji prijatelja možemo napraviti jednu klasu da bude prijatelj druge klase koja se naziva razredom prijatelja . Tako da klasa prijatelja može dobiti pristup privatnim članovima definiranim unutar druge klase. Važno je zapamtiti da klasa prijatelja može pristupiti samo imenima definiranim unutar drugog razreda umjesto nasljeđivanja druge klase. Upravo, članovi prve klase ne mogu postati članovi klase prijatelja. Ove klase prijatelja se rijetko koriste.
Klasa prijatelja može biti deklarirana u više od jedne klase. Smatra se kratkom alternativnom metodom za funkciju prijatelja jer uz pomoć toga možemo stvoriti klasu prijatelja koja može pristupiti cijelim članovima podataka i funkcionirati umjesto stvaranja više funkcija prijatelja.
#include pomoću imena prostora std; class First {// Izjavite razred prijatelj prijatelj klase Second; public: Prvo (): a (0) {} void print () {cout << "Rezultat je" << a << endl; } privatno: int a; }; class Second {public: void promjena (First & yclass, int x) {yclass.a = x; }}; int main () // Izlaz Rezultat je 0 Rezultat je 5Ključne razlike između funkcije prijatelja i razreda prijatelja
- Funkcija prijatelja je funkcija koja može pristupiti privatnim i zaštićenim članovima klase. Nasuprot tome, klasa prijatelja je klasa koja pomaže u pristupu privatnim članovima klase.
- Funkcija prijatelja je deklarirana uključivanjem prototipa unutar klase, uz prethodnu odluku s ključnom riječi prijatelj. Slično tome, klasa prijatelja se također definira pomoću ključne riječi friend.
- Naprijed deklaracija se koristi u slučaju prijatelja funkciju kao protiv, to nije potrebno koristiti u razredu prijatelja.
Zaključak
Funkcija prijatelja je potrebna kada funkcija treba pristupiti dvjema ili više nezavisnih klasa, internim članovima. S druge strane, klasa prijatelja je potrebna kada klasa zahtijeva pristup članovima druge klase. Kada višestruka funkcija mora biti prijatelj te funkcije, u tom slučaju je bolje koristiti razred prijatelja.