ex ~thereau~ ,new nick Rapk1d
Salut [b]Vizitator ! Ai postat pana acum 5mesaje.
Esti inscris din data de
Joi Ian 01, 1970.[color=green]
Ultima vizita a fost in Joi Ian 01, 1970.
Sa ii uram bun venit lui ionutpogonici , ultimul membru! Inregistreaza-te si intra in staff-ul nostru![/b]

Alăturați-vă forumului, este rapid și ușor

ex ~thereau~ ,new nick Rapk1d
Salut [b]Vizitator ! Ai postat pana acum 5mesaje.
Esti inscris din data de
Joi Ian 01, 1970.[color=green]
Ultima vizita a fost in Joi Ian 01, 1970.
Sa ii uram bun venit lui ionutpogonici , ultimul membru! Inregistreaza-te si intra in staff-ul nostru![/b]
ex ~thereau~ ,new nick Rapk1d
Doriți să reacționați la acest mesaj? Creați un cont în câteva clickuri sau conectați-vă pentru a continua.

Tutorial C++ Controlul accesului la clase

In jos

Tutorial C++ Controlul accesului la clase Empty Tutorial C++ Controlul accesului la clase

Mesaj Scris de ~thereau~ Mier Iul 21, 2010 9:48 pm

Spre deosebire de limbajele orientate-obiect pure, C++ permite controlul accesului la membrii claselor. In acest scop, s-au creat trei specificatori de control ai accesului:
public: membrul poate fi accesat de orice functie din domeniul declaratiei clasei;
private: membrul este accesibil numai functiilor membre si prietene ale clasei;
protected: similar cu private, insa accesul se extinde si la functiile membre si prietene ale claselor derivate.
De remarcat este faptul ca o functie membra a unei clase are acces la toti membrii clasei, indiferent de specificatorul de acces.
Asadar, sintaxa declaratiei unei clase derivate incluzand controlul accesului este:
Cod:
class NumeClasaDerivata: SpecificatorAcces NumeClasaDeBaza
unde SpecificatorAcces poate fi public sau private.
Pentru a oferi clasei derivate acces la un membru al clasei de baza, acesta trebuie declarat protected sau public. Pentru respectarea principiului incapsularii datelor, datele membre pentru care se ofera acces claselor derivate se declara in clasa de baza cu atributul protected. De asemenea, pentru a conversa dreptul de acces in urma derivarii, se utilizeaza public. Accesul poate fi stopat pe orice nivel al ierarhiei de clase printr-o derivare private.
Stabilirea atributelor de acces ale membrilor unei clase, precum si ale derivarilor, trebuie sa se faca astfel incat dezvoltarea ierarhiei de clase sa nu afecteze principiul incapsularii datelor.
Exemplu:
Cod:
class Point
{
protected:
unsigned x, y;
public:
Point();
Point(unsigned X, unsigned Y);
~Point();
unsigned long Arie();
unsiged GetX();
unsigned GetY();
void SetX(unsigned X);
void SetY(unsigned Y);
};
class GraphicPoint: public Point
{
unsigned color;
public:
GraphicPoint(unsigned X, unsigned Y, unsigned Color);
~GraphicPoint();
void Draw();
void SetX(unsigned X);
void SetY(unsigned Y);
};
Se observa ca variabilele membru ale x si y sunt declarate protected, asa inmcat vor fi vizibi,le si vor avea acelasi atribut in clasa GraphicPoint( desi nu sunt utilizate). In mod normal, x si y ar trebui sa fie declarati private, intrucat nu sunt utilizati decat in interiorul clasei Point. Functiile din GraphicPoint nu acceseaza acesti doi membri direct, ci prin intermediul metodelor publice de accesare oferite de clasa Point.
Important de notat este faptul ca, implicit, daca nu este utilizat nici un specificator de accees, membrii sunt considerati private.
Cod:
void main()
{
Point *p;
p = new Point;
p->x = 5; // operatie imposibila: x este membru privat
p->x = 6; // operatie imposibila: y este membru privat
p->SetX(3); /* corect: acces la variabila X se face prin intermediul functiei
SetX() */
p->SetY(6);
printf("Aria = %d\n", p->Aria());
delete p;
}
Am demonstrat prin acest exemplu de program ca din exteriorul unei clase nu pot fi accesate datele membre private sau protected.

Functii si clase prietene

In paragraful precedent, am afirmat ca principiul incapsularii datelor este bine de respectat in cadrul elaborarii ierarhiei de clase. Cu toate acestea, exista situatii in care este greu sa se respecte acest principiu. De accea, Bjarne Sroutstrup 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 protejarii datelor prin incapsulare. Este de recomandat ca mecanismul friend sa fie folosit numai in cazul in care nu exista alta solutie!
Mecanismul friend( sau prietenie) a aparut datorita imposibilitatii de a face ca o metoda sa fie membra a mai multe 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
Un exemplu:
Cod:
class Point {
friend unsigned long Calcul(unsigned X, unsigned Y);
public:
fiend 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, nua re 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 urmatoarea:
friend class NumeClasaPrietena
Exemplu
Cod:
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 cu o clasa B, iar clasa B este prietena cu o clasa C, aceasata nu inseama ca A este prietena cu C. De asemenea, proprietatea de prietenie nu se mosteneste in clasele derivate !
~thereau~
~thereau~
*FondatoR*
*FondatoR*

Varsta: : 10/07/2010
Localizare : Pascani/Iasi
Mesaje : 563
Credite : 1337
Varsta : 32

https://stargame.catsboard.com/forum.htm

Sus In jos

Tutorial C++ Controlul accesului la clase Empty Re: Tutorial C++ Controlul accesului la clase

Mesaj Scris de Vizitato Joi Iul 22, 2010 2:54 pm

Merita nota 10
avatar
Vizitato
Vizitator


Sus In jos

Sus


 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum