Extras din curs
Functii si clase prietene
In paragraful precedent, am afirmat ca principiul incapsularii datelor este bine sa fie respectat in cadrul elaborarii ierarhiei de clase. Cu toate acestea, exista situatii in care este greu sa se respecte acest principiu. De aceea, Bjarne Stroustrup a introdus un concept menit sa rezolve si aceste situatii particulare, pentru a oferi solutii elegante in vederea rezolvarii tuturor situatiilor posibile. Acest concept este cel de friend, care permite practic abateri controlate de la ideea protectiei datelor prin incapsulare. Mecanismul de friend este bine sa fie folosit numai in cazul in care nu exista alta solutie!
Mecanismul de friend (sau prietenie) a aparut datorita imposibilitatii ca o metoda sa fie membru a mai multor clase.
Functiile prietene sunt functii care nu sunt metode ale unei clase, dar care au totusi acces la membrii privati ai acesteia. Orice functie poate fi prietena a unei clase, indiferent de natura acesteia.
Sintaxa declararii unei functii prietene in cadrul declaratiei unei clase este urmatoarea:
friend NumeFunctie
Iata si un exemplu:
class Point {
friend unsigned long Calcul(unsigned X, unsigned Y);
public:
friend unsigned long AltaClasa::Calcul(unsigned X, unsigned Y);
...
};
unsigned long Calcul(unsigned X, unsigned Y) {
return X * Y / 2;
}
unsigned long AltaClasa::Calcul(unsigned X, unsigned Y) {
...
}
Dupa cum se vede din exemplul de mai sus, nu are nici o importanta in cadrul carei sectiuni este declarata functia prietena.
Clasele prietene sunt clase care au acces la membrii privati ai unei clase. Sintaxa declararii unei clase prietene este:
friend class NumeClasaPrietena
Iata si un exemplu:
class PrimaClasa {
...
};
class ADouaClasa {
...
friend class PrimaClasa;
};
In exemplul de mai sus, clasa PrimaClasa are acces la membrii privati ai clasei ADouaClasa.
Important este sa remarcam ca relatia de prietenie nu este tranzitiva. Daca o clasa A este prietena a clasei B, si clasa B este prietena a unei clase C, aceasta nu inseamna ca A este prietena a clasei C. De asemenea, proprietatea de prietenie nu se mosteneste in clasele derivate.
Preview document
Conținut arhivă zip
- Programare Avansata Utilizand Clase.doc