marți, 29 ianuarie 2008

Constructorii de clase in C++

Constructorul unei clase este o functie speciala care se excuta automat ori de cate ori programu creeaza o noua instanta de clasa. Functia constructor trebuie sa aiba acelasi nume cu clasa din care face parte si sa fie publica in cadrul clasei, adica accesibila tuturor. Functiile constructor nu returneaza valori.

Ex:


class Carte
{
public:
Carte(); //declararea constructorului

};



Functia constructor se executa in momentul in care se ajunge cu codul executabilului la declararea unei variabile de tipul clasei. Daca se intalnesc mai multe instante una dupa alta constructorul se executa in ordine de la stanga la dreapta de sus in jos, daca variabila este globala functia constructor se executa inainte de functia main.
Functiile constructor pot primi si parametri. Mai jos este un exemplu de clasa cu o mai multe functii constructor supraincarcate.


class Carte
{
int ID;
public:
char* titlu;
int nrPag;
Carte();
Carte(char* titlu);
Carte(Carte& c);

};
Carte::Carte()
{
ID = 0;
nrPag = 0;
titlu = new char[strlen("Titlu")+1];
strcpy(titlu,"Titlu");
}
Carte::Carte(char* titlu)
{
ID = 0;
nrPag = 0;
Carte::titlu = new char[strlen(titlu)+1];
strcpy(Carte::titlu,titlu);

}
Carte::Carte(Carte& c)
{
titlu = new char[strlen(c.titlu)+1];
strcpy(titlu,c.titlu);
nrPag = c.nrPag;
ID = c.ID;
}


Constructorul de mai sus ce primeste ca parametru prin referinta insasi clasa se numeste constructor de copiere. Acesta se apeleaza atunci cand se instantiaza o variabila cu ajutorul operatorului egal sau cand se copiaza pe stiva la apelul unei functii clasa noastra. ex cand initializam clasa c:
Carte d;
Carte c = d; //se porneste constructorul de copiere
o_functie(c); //cand se apeleaza aceasta functie se apeleaza si constructorul de copiere pentru variabila temporara ce va fi folosita in cadrul functiei.

c=d; //nu este pornit constructorul de copiere


Exercitiu:Creati clasa student ce are atributele: nume, vartsa si notaBac. Creati un constructor fara parametri, unul ce are 3 parametri si un constructor de copiere. In main trebuie sa fie initializati doi studenti unul prin constructor implicit altul prin constructorul cu parametri.Compilati si executati programul.

Niciun comentariu: