Extras din laborator
Clasele reprezintă tipuri de data abstracte, asemănătoare structurilor, care încapsulează comportamentul şi datele asociate unei entităţi. Comportamentul este descris cu ajutorul metodelor (funcţii incluse), iar datele cu ajutorul atributelor. O instanţă (realizare concretă) a unei clase se numeşte obiect. Sintaxa utilizată pentru definirea claselor este asemănătoare cu cea pentru structuri:
class nume_clasa
{
// atribute si metode
};
Obiectele pot fi create ca orice variabilă cu sintaxa: nume_clasa nume_obiect;.
Metodele unei clase sunt similare funcţiilor obişnuite, cu două excepţii:
- primul parametru (adăugat automat de către compilator) este un pointer către obiectul curent
- metodele pot accesa direct atributele (nu necesită folosirea operatorului „.”)
Accesul din exterior la atributele şi metodele unei clase se face folosind operatorul „.” (sau „->” în cazul pointerilor).
Atributele şi metodele unei clase pot fi grupate din punctul de vedere al drepturilor de acces in trei categorii:
- private: pot fi accesate doar din interiorul clasei
- protected: pot fi accesate din interiorul clasei şi din clase derivate
- public: pot fi accesate atât din interiorul cât şi din exteriorul clasei
O clasă poate oferi acces nerestricţionat la membrii proprii prin utilizarea cuvântului cheie friend în una din formele:friend prorotip_funcţie; sau friend nume_clasă;.
Controlul accesului permite dezvoltatorului clasei limitarea modului de utilizare al clasei şi ascunderea implementării interne a operaţiilor. Prin aceasta cel care implementează clasa are posibilitatea de a modifica modul în care sunt stocate intern datele sau sunt implementate operaţiile fără a afecta aplicaţiile deja construite.
Modificatorii de acces pot fi utilizaţi atât in cadrul claselor cât şi în cadrul structurilor. Accesul este implicit public pentru structuri şi private pentru clase.
Metodele pot fi definite atât în interiorul clasei (inline) cât şi în afara acestora, folosind operatorul de rezoluţie „::”.
Exemplu – Clasa număr complex:
#include <iostream>
#include <cmath>
using namespace std;
// definire clasa
class Complex
{
public: // sectiunea publica (accesibila din exterior)
// definire metode inline
double& getReal() { return real; }
double& getImag() { return imag; }
// declarare metoda definita in afara clasei
double Modul();
private: // sectiunea privata
// definire atribute
double real, imag;
};
// definire metoda in afara clasei
double Complex::Modul()
{
return sqrt(real*real + imag*imag);
}
void main()
{
// definire obiect
Complex c1;
// apelare metode pentru setarea valorii
c1.getReal() = 4;
c1.getImag() = 3;
cout << "Modulul este " << c1.Modul() << endl;
}
Constructori
Constructorii sunt funcţii speciale apelate automat de compilator la crearea unui nou obiect. În cazul în care nu există nici un constructor definit de către programator, compilatorul va sintetiza un constructor implicit fără parametri.
Constructorii sunt metode ale clasei cu următoarele caracteristici:
- au numele identic cu al clasei din care fac parte
- nu au tip returnat
Rolul constructorilor este de a iniţializa atributele obiectului. O clasă poate avea mai mulţi constructori care să difere prin numărul şi/sau tipul parametrilor.
Spre deosebire de funcţiile obişnuite, constructorii pot avea o listă de iniţializare pentru atributele clasei de forma:
constructor(param constructor) : atribut_1(param), …, atribut_n(param) {…}
Exemple de constructori pentru clasa prezentată anterior:
Preview document
Conținut arhivă zip
- Clase.pdf