Soovitatav, 2024

Toimetaja Valik

Sõbra funktsiooni ja sõbra klassi erinevus

Sõbra funktsioon ja sõber on tehnikad, mida kasutatakse klassi privaatsete liikmete pääsemiseks sõbra märksõna abil. Sõberfunktsiooni ja sõberklassi vaheline erinevus on see, et sõberfunktsiooni kasutamisel pääseb eraklassi liikmetele juurde, kuid sõbraklassis ei pääse ainult sõbraklassi nimed mitte klassi eraliikmed.

Sõberfunktsioon, kas seda funktsiooni või klassi kasutavad, võib avaldada objektiivile orienteeritud raamistikule negatiivset mõju, kuna see nõrgendab kapseldamist, mis on objekti-orienteeritud paradigma vastu. See on põhjus, miks sõbra funktsiooni tuleb kasutada targalt, vastasel juhul võib see koodi koodi peitmise katkestada .

See sõbra funktsioon ei ole kommutatiivne ega transitiivne . X on Y sõber, ei järelda, et Y on ka X sõber. Kui X on Yi sõber ja Y on Z sõber, ei tähenda see, et X on Z. sõber.

Võrdluskaart

Võrdluse alusSõbra funktsioonSõbraklass
PõhilineSee on funktsioon, mida kasutatakse koos sõbra märksõnaga, et anda mitteliikmetele funktsioon juurdepääsu klassi isiklikele liikmetele.See on klass, mida kasutatakse koos sõbra märksõnaga teise klassi privaatsete liikmete juurde pääsemiseks.
Edasta deklaratsioonTuleb kasutada.Ei ole kohustuslik.
KasutageSõberfunktsiooni saab kasutada teatud olukorras, kus operaator on ülekoormatud.Sõbraklassi saab kasutada, kui klass luuakse teise klassi tippu.

Sõbra funktsiooni määratlus

Sõberfunktsiooni kasutatakse klassi era- ja kaitstud liikmetele juurdepääsu võimaldamiseks, võimaldades mitteliikmetele juurdepääsu. Seda tüüpi funktsioonis kasutatakse sõbra märksõna enne funktsiooni nime deklaratsiooni esitamise ajal. Sõberfunktsiooni suhtes kehtivad mõned piiravad tingimused. Esimene tingimus on, et sõberfunktsioon ei ole päritud lasteklassi poolt. Teine tingimus on see, et ladustamisklassi täpsustaja ei pruugi olla sõberfunktsioonis, mis tähendab, et seda ei saa deklareerida staatiliseks ja väliseks.

Sõberfunktsiooni ei kutsuta klassi kutsuva objektiga. Sõberfunktsiooni näited on: globaalne funktsioon, klassi liikmefunktsioon, funktsiooni mall võib olla sõberfunktsioon. Mõistame seda näite abil.

 #kasuta nimeruumi std; esimese klassi {int andmed; avalik: esimene (int i): andmed (i) {} sõber tühine ekraan (const first & a); }; tühi kuva (const first & a) {cout << "data =" < 

Sõbraklassi mõiste

Sarnaselt sõberfunktsiooniga saame ühe klassi olla teise klassi sõber, keda nimetatakse sõbraklassiks . Nii, et sõberklass saab juurdepääsu teistesse klassidesse määratud eraklientidele. Oluline on meeles pidada, et sõberklass saab kasutada ainult teise klassi sees asuvaid nimesid selle asemel, et pärida teist klassi. Täpselt, esimese klassi liikmed ei saa sõberklassi liikmeteks. Neid sõprusklasse kasutatakse harva.

Sõbraklassi saab deklareerida rohkem kui ühes klassis. Seda peetakse lühikeseks alternatiivseks meetodiks sõberfunktsiooni jaoks, sest selle abil saame luua sõbraklassi, mis suudab mitme sõbra funktsiooni loomise asemel pääseda juurde kogu andmeliikmele ja funktsioonile.

 #kasuta nimeruumi std; klass Esimene {// Kuuluta sõbraklassi sõber klassi Teine; avalik: Esiteks (): a (0) {} void print () {cout << "Tulemuseks on" << a << endl; } private: int a; }; klass Teine {public: void change (esimene & yclass, int x) {yclass.a = x; }}; int main () // Väljund Tulemuseks on 0 Tulemuseks on 5 

Sõberfunktsiooni ja sõbra klassi vahelised peamised erinevused

  1. Sõbra funktsioon on funktsioon, mis võimaldab ligipääsu klassi era- ja kaitstud liikmetele. Samas on sõbraklass klass, mis aitab ligipääsu klassi isiklikele liikmetele.
  2. Sõbra funktsioon on deklareeritud, lisades selle prototüübi klassi sees, andes selle märksõnaga sõbraks. Sarnaselt on sõbra klass määratletud ka märksõna sõbra abil.
  3. Edastusdeklaratsiooni kasutatakse sõberfunktsioonide korral, seda ei ole vaja kasutada sõbraklassis.

Järeldus

Sõbra funktsioon on vajalik, kui funktsioonil on juurdepääs kahele või enamale iseseisvale klassile, sisemisele liikmele. Teisest küljest, kui klass vajab juurdepääsu teise klassi liikmetele, on vaja sõberklassi. Kui mitme liikme funktsioon peab olema selle funktsiooni sõber, on sel juhul parem kasutada sõbraklassi.

Top