Funkcija za prijatelje, ki jo uporablja funkcija ali razred, lahko negativno vpliva na objektno usmerjen okvir, saj oslabi enkapsulacijo, ki je proti objektno usmerjeni paradigmi. To je razlog, zakaj je treba funkcijo prijatelja uporabiti pametno, sicer bi lahko prekinila skrivanje podatkov kode.
Ta prijateljska lastnost ni niti komutativna niti prehodna . X je prijatelj Y in ne sklepa, da je Y tudi prijatelj X. Če je X prijatelj Y in Y je Z prijatelj, ne pomeni, da je X prijatelj Z.
Primerjalna tabela
Podlaga za primerjavo | Funkcija prijatelja | Razred prijateljev |
---|---|---|
Osnovno | Gre za funkcijo, ki se uporablja s ključno besedo prijatelja, ki dodeli nečlanskemu dostopu do zasebnih članov razreda. | To je razred, ki se uporablja s ključno besedo prijatelja za dostop do zasebnih članov drugega razreda. |
Naprej deklaracija | Uporabiti je treba. | Ni obvezno. |
Uporaba | Funkcija prijatelja se lahko uporablja v nekaterih primerih preobremenitve operaterja. | Skupina prijateljev se lahko uporabi, ko je razred ustvarjen na vrhu drugega razreda. |
Opredelitev funkcije prijateljev
Funkcija prijatelja se uporablja za dostop do zasebnih in zaščitenih članov razreda tako, da omogoči dostop nečlanski funkciji. Pri tej vrsti funkcije se ključna beseda prijatelja uporablja pred imenom funkcije v času deklaracije. Za funkcijo prijateljev veljajo nekateri omejevalni pogoji. Prvi pogoj je, da funkcijo prijatelja ne podeduje otroški razred. Drugi pogoj je, da specifikacija razreda skladiščnika morda ni prisotna v funkciji prijatelja, kar pomeni, da je ni mogoče deklarirati kot statična in zunanja.
Funkcija prijatelja se ne pokliče s predmetom, ki kliče razred. Primeri funkcij prijateljev so: globalna funkcija, funkcija člana razreda, funkcija predloga je lahko funkcija prijatelja. Razumimo ga s pomočjo primera.
#include using namespace std; prvi razred {int data; public: najprej (int i): data (i) {} prijatelj void display (const first & a); }; void prikaz (const first & a) {cout << "data =" <Opredelitev razreda prijateljev
Podobno kot prijateljska funkcija lahko naredimo en razred za prijatelja drugega razreda, ki se imenuje prijateljski razred . Tako lahko prijateljski razred pridobi dostop do zasebnih članov, definiranih v drugem razredu. Pomembno je vedeti, da lahko prijateljski razred dostopa samo do imen, definiranih v drugem razredu, namesto dedovanja drugega razreda. Ravno člani prvega razreda ne morejo postati člani razreda prijatelja. Ti razredi prijateljev se redko uporabljajo.
Razred prijatelja lahko deklariramo v več kot enem razredu. Šteje se za kratko alternativno metodo za funkcijo prijatelja, saj lahko s pomočjo tega ustvarimo razred prijatelja, ki lahko dostopa do celotnih podatkovnih članov in deluje namesto ustvarjanja več funkcij prijateljev.
#include using namespace std; class First {// razglasi razredu prijatelja prijatelja razreda Second; public: Prvo (): a (0) {} void print () {cout << "Rezultat je" << a << endl; } private: int a; }; Razred Second {public: void change (prva & yclass, int x) {yclass.a = x; }}; int main () // Izhod Rezultat je 0 Rezultat je 5Ključne razlike med funkcijo prijatelja in razredom prijateljev
- Funkcija prijatelja je funkcija, ki lahko dostopa do zasebnih in zaščitenih članov razreda. Nasprotno pa je prijateljski razred razred, ki pomaga pri dostopu do zasebnih članov razreda.
- Funkcija prijatelja je razglašena z vključitvijo svojega prototipa v razred, s pomočjo ključne besede prijatelj. Podobno je razred prijatelja definiran tudi s ključno besedo prijatelj.
- Napovedna deklaracija se uporablja v primeru, da je prijateljska funkcija v nasprotju, ni ga treba uporabljati v razredu prijateljev.
Zaključek
Funkcija prijatelja je potrebna, ko funkcija potrebuje dostop do dveh ali več neodvisnih razredov, notranjih članov. Po drugi strani pa je potreben razred prijatelja, kadar razred zahteva dostop do članov drugega razreda. Če mora biti funkcija večih članov prijatelj te funkcije, je v tem primeru bolje uporabiti razred prijatelja.