vineri, 29 februarie 2008

Introducere

Exemplu:
class numar
{
private:
int a;
public:
numar(); //constructor, are acelasi nume cu clasa, se apeleaza cand
//instantiem un obiect de tipul numar
numar(int); //constructor cu un parametru
~numar(); //destructor, se apeleaza fie cand se incheiete executia
//si toate variabilele de pe stiva sunt distruse,
//fie cand eliberam memoria, daca a fost alocat dinamic
int geta();
int seta(int);
};


Pana acum doar am declarat clasa, urmeaza s-o implementam. Se recomanda implementarea in cadrul declararii clasei doar a functiilor scurte (functii inline) - ruleaza mai rapid dar ocupa spatiu de fiecare data cand instantiem un obiect de tipul clasei.
Putem avea oricati constructori, cu conditia sa difere numarul parametrilor (sau tipul lor, daca nu sunt tipuri similare, gen int - double). Constructorul cu parametri il putem aplea in mod urmator:

numar a(1);

sau

numar *a = new numar(1);

Implementarea metodelor:

numar::numar(){...}
numar::numar(int a){...}
numar::~numar(){...}

Sintaxa pentru cosntructor si destructor. Destructorul nu primeste nici un parametru niciodata. Operatorul :: specifica clasa careia ii apartine metoda pe care o implementam.

int numar::seta(int a)
{
return this->a = a;
}

Ce se intampla daca unul dintre parametri are acelasi nume cu un membru al clasei? Parametrul va fi mai sus in stiva decat membrul clasei, deci in interiorul functiei variabila a va desemna parametrul si nu membrul clasei. Pentru a avea acces la membru folosim pointerul this. Orice clasa are un pointer implicit catre ea insasi (recomandat de folosit pentru a evita confuziile).

Specificatoru: private, public, protected.
private - membrii privati pot fi accesati doar de membri ai clasei;
public - membrii publici pot fi accesati de orice metoda a programului;
protected - membrii protected pot fi accesati doar de membrii clasei si clasei ce o mosteneste.