Răspunsuri

2014-05-29T07:26:59+03:00
Un obiect este un exemplar sau o instanţă a unei clase (în vechea terminologie obiectul este echivalent unei variabile, iar clasa este echivalentul unui tip definit de utilizator). Considerăm conceptul Data, pe care-l reprezentăm printr-o structură şi un set separat de funcţii de manipulare: struct Data{ int a, l, z; // reprezentare }; void initD(const Data&, int, int, int); //initializare void ad_a(const Data&, int); //adauga un an void ad_l(const Data&, int); //adauga o luna void ad_z(const Data&, int); //adauga o zi Nu există o legătură implicită între date şi funcţiile de manipulare a lor. Pentru a stabili această legătură, declarăm funcţiile ca membre ale structurii: struct Data{ int a, l, z; // reprezentare ..// functii de manipulare void initD(int, int, int); // initializare void ad_a(int); void ad_l(int); void ad_z(int); }; Funcţiile declarate în definirea clasei (structura este o clasă) se numesc funcţii membre şi pot fi apelate numai de variabile de tipul corespunzător (obiecte) folosind sintaxa de acces la membrii structurii: Data d; d.initD(2001, 10, 15); d.ad_a(3); . . . Definirea funcţiilor membre, în afara clasei se face folosind operatorul de vizibilitate (rezoluţie), care indică faptul că funcţia aparţine clasei specificate înaintea acestui operator. void Data::initD(int aa, int ll, int zz){ a = aa; l = ll; z = zz; }; Declararea unei clase se face în mod asemănător cu declararea unei structuri. Cuvântul struct este înlocuit prin class, iar câmpurile se separă în date membre şi funcţii membre (sau metode). În plus, se pot preciza specificatori de acces la membri. Aceştia pot fi: • private – membrii sunt accesibili numai din interiorul clasei • public – membrii sunt accesibili din afara clasei • protected – membrii sunt accesibili din interiorul clasei şi din clasele derivate Domeniul de definiţie al clasei este cuprins între începutul definiţiei clasei (class nume) şi sfârşitul definiţiei. Domeniul unui specificator de acces se întinde din locul unde apare, până la următorul specificator de acces. Dacă nu apare nici un specificator de acces, accesul la membrii clasei nu va fi permis din afara ei (implicit se consideră specificatorul private). Datele clasei (definind structura sau starea) fiind private sunt “încapsulate”, adică ascunse utilizatorului. Acesta nu le poate accesa direct, ci numai prin intermediul unor funcţii de acces publice, care aparţin interfeţei ce defineşte comportarea clasei. (de obicei datele sunt private şi funcţiile sunt publice.) //declararea clasei (interfata) class Data{ int a, l, z; // reprezentare public: void initD(int, int, int); void ad_a(int); void ad_l(int); void ad_z(int); }; Variabilele ce apar în declaraţia clasei (datele membre), fiind private, pot fi folosite numai de către funcţiile membre. Funcţiile membre din partea publică pot fi accesate de către oricine. O structură este o clasă cu toţi membrii publici. Un alt exemplu - clasa punct; are ca date membre – abscisa şi ordonata, iar accesul la ele va fi oprit; ca funcţii membre vom prevedea: iniţializarea, funcţii de acces la date, de setare date şi afişarea. #include #include // declaraţia clasei class punct{ private: double x0, y0; // date membre public: void init(double x=0, double y=0){ x0 = x; y0 = y; }; void setx(double x){ x0 = x; }; void sety(double y){ y0 = y; }; double getx(){ return x0; }; double gety(){ return y0; }; void afisare(){ long f = ios::fixed; cout << setiosflags(f) << setw(6) << setprecision(2); cout << “(“ << x0 << “,” << y0 << “)” << endl; }; }; void main(){