FUNCȚII PRIETENTE ___________________________________________________________ 1
Funcții prietenoase unei clase ____________________________________________________ 1 Funcții care sunt prietenoase cu mai multe clase ________________________________________________ 3 Funcții ale membrilor care sunt prietenoase cu o altă clasă _____________________________________________ 4
CURSURI DE PRIETENI ____________________________________________________________ 5
Spune-mi cine e prietenul tău și îți spun cine are acces la datele tale private.
Conceptul de încapsulare a datelor este unul dintre conceptele fundamentale ale POR. C ++ oferă o oportunitate de a ocoli acest concept cu ajutorul unor funcții prietenoase. Cu toate acestea, nu merită să o utilizați fără un motiv bun. C ++ vă permite să declarați două tipuri de prieteni de clasă: o funcție prietenoasă sau o clasă prietenoasă.
Funcții prietenoase unei clase
Modul obișnuit de a accesa membrii particulari ai unei clase este acela de a utiliza o funcție deschisă a membrilor. Totuși, C ++ suportă și un alt mod de a accesa membrii particulari ai clasei - folosind funcții prietenoase. Funcțiile prietenoase nu fac parte din clasă, ci au acces la membrii săi privați. În plus, o astfel de funcție poate avea acces la membrii privați ai mai multor clase.
Pentru a declara o funcție prietenoasă unei anumite clase, definiția acestei clase include prototipul ei, înaintea căruia este pus cuvântul cheie prieten. Să dăm un exemplu:
// tipărește numele și coordonatele punctului curent pe ecranul void Print () const;
// returnează distanța dintre punctele curente și cele specificate duble Dist (Dot B) const;
// returnează distanța dintre două puncte specificate
prieten dublu Dist (const Dot A. const Dot B);
// returnează distanța dintre două puncte specificate
Distribuția dublă (Dot * pA, Dot * pB); // funcția primește indicii // returnează valoarea zonei triunghiului cu vârfuri date
zonă dublă (const Dot A. const Dot B. const Dot C);
dublu Dot. Dist (Dot B) const
Fișierul Dot.cpp
Punctul A ("A", 3, 4). B ("B", -3.4); Dot C ("C");
CharToOem ("Lungimea liniei", S);
cout<
CharToOem ("zona triunghiului", S); cout<
În exemplul de mai sus, se declară clasa punctului Dot și se rezolvă problema calculării distanței dintre două puncte. Problema este rezolvată în trei moduri diferite.
Funcția dublă Dot. Dist (Dot B) const este un membru al clasei Dot și returnează valoarea distanței dintre punctele curente și cele specificate. Specificatorul const indică compilatorului că nu trebuie schimbată starea obiectului curent. Ca parametru, funcția primește un întreg obiect de tip Dot. care ocupă în memorie 17 octeți. Funcția de membru al clasei este apelată de operator: A. Dist (B). unde obiectul A este curent, iar obiectul B este un parametru.
Prietenul funcțional dublu Dist (const Dot A. const Dot B) returnează distanța dintre două puncte specificate. Calificatorul const înaintea parametrilor spune compilatorului că starea parametrilor nu trebuie schimbată. Ca parametri, funcția primește două referințe la obiectele de tip Dot. care ocupă câte 4 octeți fiecare în memorie. Funcția este apelată de operatorul Dist (A. B). Deoarece funcția este o clasă prietenoasă. apoi accesul la elementele închise x și y ale parametrilor A și B care sunt obiecte de tip Dot. se efectuează folosind operatorul punct, de exemplu:
Utilizarea indicatoarelor și a referințelor de obiecte ca parametri de funcții în loc de obiecte reduce cantitatea de memorie rezervată funcției și timpul în care este apelată.
Exemplul de mai sus conține, de asemenea, o soluție la problema calculului ariei unui triunghi folosind zona dublă de funcții globale (const Dot A. const Dot B. const Dot C), care,
returnează trei referințe la puncte și returnează valoarea zonei triunghiului. Funcția se numește oper-