Salt la conținutul principal
Modulul 4 · Lecția 2 din 210/18 în curs~12 min
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.
C++
#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:

C++
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).
C++
class ResourceManager {
public:
    ~ResourceManager() {
        // Cleanup code
        std::cout << "Resources released." << std::endl;
    }
};

Încercați-l singur

Exercițiu#cpp.m4.l2.e1
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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

Exercițiu#cpp.m4.l2.e2
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
Afișează indiciu

Constructorul implicit nu acceptă argumente: `Point() { x = 0; y = 0; }`.

Soluție disponibilă după 3 încercări