Documente Academic
Documente Profesional
Documente Cultură
Lab 2 Rom
Lab 2 Rom
Una din cele mai rspndite erori de programare (n orice limbaj) const n utilizarea
obiectelor fr iniializare anterioar, aa precum nu toate limbajele asigur iniializare
automat. Desigur, poate fi definit funcia de iniializare i de distrugere a obiectului:
class Book{
char *author;
int year;
int pages;
public:
void Init(char*, int, int);
void Destroy();
};
void Book::Init(char* a, int y, int p){
author = new char[strlen(a)+1];
strcpy(author,a);
year=y;
pages=p;
}
void Book::Destroy(){
delete[] author;
}
Pentru a evita aceast eroare, C++ asigur mecanismul de iniializare automat pentru
clasele definite de utilizator constructorul clasei. Iar pentru operaiile de distrugere
destructorul clasei.
Constructorul este o funcie membru special, de acelai nume cu numele clasei, care
se apeleaz automat la crearea obiectului de tipul clasei. Constructorul nu returneaz nici un
rezultat, chiar nici void. Compilatorul garanteaz apelarea unic a constructorului pentru un
singur obiect.
Destructorul este o funcie membru special, care se apeleaz automat la distrugerea
obiectului. Numele unui destructor este numele clasei precedat de caracterul ~.Compilatorul
garanteaz apelarea unic a destructorului pentru un singur obiect. Un destructor nu are
parametri, de aceea nu poate fi suprancrcat, i el este unic pentru o clas.
}
// aici se apeleaz automat destructorul pentru b.
Tipurile constructorilor
Fiecare clas trebuie s conin constructori. Dac clasa conine elemente pointeri trebuie
neaprat s se suprancarce constructorul de copiere, care se utilizeaz pentru crearea copiilor
obiectului, la apelul obiectului n funcie. Motivul suprancrcrii constructorului de copiere
const n necesitatea utilizrii aciunilor suplimentare n comparaie cu algoritmul standard de
copiere, deoarece se poate ntmpla ca dou obiecte diferite s refere una i aceeai memorie,
ceea ce poate duce la pierderea informaiei i la erori n sistemul de operare.
Exemplu de constructori de copiere:
Book::Book(const Book& b){
author = new char[strlen(b.author)+1];
strcpy(author, b.author);
year = b.year;
pages = b.pages;
}
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.