Lecții din modul (2/2)
Constructori și Destructori
Constructorii și destructorii sunt funcții membre speciale care gestionează ciclul de viață al obiectelor: crearea (inițializarea) și distrugerea lor (curățarea resurselor).
Constructorii
Un constructor este apelat automat atunci când un obiect al clasei este creat în memorie.
- Are același nume ca și clasa.
- nu are un tip de returnare (nici măcar
void). - Poate fi supraîncărcat pentru a accepta diferite seturi de parametri.
#include <iostream>
#include <string>
class Item {
private:
std::string name;
double price;
public:
// Parameterized constructor
Item(std::string itemName, double itemPrice) {
name = itemName;
price = itemPrice;
std::cout << "Object " << name << " created." << std::endl;
}
void display() {
std::cout << name << ": " << price << " EUR" << std::endl;
}
};
int main() {
// Implicit call to the constructor passing parameters
Item book("Libro C++", 29.99);
book.display();
return 0;
}Constructor implicit
Dacă nu definiți niciun constructor, compilatorul C++ generează un constructor implicit fără parametri. Cu toate acestea, dacă scrieți un constructor personalizat cu parametri, compilatorul nu îl mai generează automat pe cel implicit, așa că va trebui să îl definiți explicit dacă este necesar:
class Point {
public:
int x;
int y;
// Explicit default constructor
Point() {
x = 0;
y = 0;
}
};Distructori
Un destructor este apelat automat atunci când obiectul iese din domeniul de aplicare sau este eliminat în mod explicit din memorie.
- Are același nume ca și clasa precedat de un tilde
~(de exemplu,~Item()). - Nu acceptă parametri și nu are niciun tip de returnare.
- Este folosit pentru a elibera resurse (de exemplu, închiderea fișierelor, eliberarea memoriei alocate dinamic).
class ResourceManager {
public:
~ResourceManager() {
// Cleanup code
std::cout << "Resources released." << std::endl;
}
};Încercați-l singur
Definiți o clasă numită User cu un membru privat std::string username. Adăugați un constructor public care acceptă un șir (Utilizator(std::string name)) și îl folosește pentru a inițializa numele de utilizator. Adăugați un getter public std::string getUsername() care returnează numele de utilizator. În principal, creați un obiect User care trece „Alice” ca nume și imprimați numele de utilizator folosind std::cout.
Afișează indiciu
Constructorul are același nume ca și clasa și nu specifică niciun tip de returnare, nici măcar `void`.
Soluție disponibilă după 3 încercări
Definiți o clasă numită Point cu doi membri întregi publici: x și y. Adăugați un constructor implicit (fără parametri) care inițializează x și y la 0. În principal, creați un obiect Point folosind constructorul implicit și imprimați x și y.
Afișează indiciu
Constructorul implicit nu acceptă argumente: `Point() { x = 0; y = 0; }`.
Soluție disponibilă după 3 încercări