Przejdź do głównej treści
eLearner.app
Moduł 4 · Lekcja 2 z 210/18 w kursie~12 min
Lekcje modułu (2/2)

Konstruktory i Destruktory

Konstruktory i destruktory to specjalne funkcje składowe, które zarządzają cyklem życia obiektów: ich tworzeniem (inicjalizacją) oraz ich niszczeniem (zwalnianiem zasobów).

Konstruktory

Konstruktor jest wywoływany automatycznie w momencie tworzenia obiektu danej klasy w pamięci.

  • Ma taką samą nazwę jak klasa.
  • Nie posiada typu zwracanego (nawet void).
  • Może być przeciążony (overloaded), aby przyjmować różne zestawy parametrów.
Code
#include <iostream>
#include <string>

class Item {
private:
    std::string name;
    double price;

public:
    // Costruttore con parametri
    Item(std::string itemName, double itemPrice) {
        name = itemName;
        price = itemPrice;
        std::cout << "Oggetto " << name << " creato." << std::endl;
    }

    void display() {
        std::cout << name << ": " << price << " euro" << std::endl;
    }
};

int main() {
    // Chiamata implicita al costruttore passando i parametri
    Item book("Libro C++", 29.99);
    book.display();
    return 0;
}

Konstruktor domyślny

Jeśli nie zdefiniujesz żadnego konstruktora, kompilator C++ wygeneruje automatycznie konstruktor domyślny bez parametrów. Jeśli jednak napiszesz własny konstruktor z parametrami, automatyczny konstruktor domyślny nie zostanie wygenerowany i będziesz musiał go zdefiniować jawnie, jeśli jest potrzebny:

Code
class Point {
public:
    int x;
    int y;

    // Costruttore di default esplicito
    Point() {
        x = 0;
        y = 0;
    }
};

Destruktory

Destruktor jest wywoływany automatycznie, gdy obiekt opuszcza zakres (scope) lub jest jawnie usuwany z pamięci.

  • Ma taką samą nazwę jak klasa poprzedzoną tyldą ~ (np. ~Item()).
  • Nie przyjmuje parametrów i nie posiada typu zwracanego.
  • Służy do zwalniania zajętych zasobów (np. zamykania plików, zwalniania pamięci przydzielonej dynamicznie).
Code
class ResourceManager {
public:
    ~ResourceManager() {
        // Codice di pulizia
        std::cout << "Risorse liberate." << std::endl;
    }
};

Spróbuj sam

Ćwiczenie#cpp.m4.l2.e1
Próby: 0Ładowanie...

Zdefiniuj klasę User z prywatną składową std::string username. Dodaj publiczny konstruktor przyjmujący ciąg znaków (User(std::string name)) i używający go do inicjalizacji username. Dodaj publiczny getter std::string getUsername() zwracający username. W main utwórz obiekt User przekazując 'Alice' jako imię i wypisz uzyskany username za pomocą std::cout.

Ładowanie edytora...
Pokaż wskazówkę

Konstruktor ma taką samą nazwę jak klasa i nie określa żadnego typu zwracanego, nawet `void`.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#cpp.m4.l2.e2
Próby: 0Ładowanie...

Zdefiniuj klasę Point z dwoma publicznymi składowymi całkowitymi x i y. Dodaj konstruktor domyślny (bez parametrów) inicjalizujący x i y na 0. W main utwórz obiekt Point przy użyciu konstruktora domyślnego i wypisz x oraz y.

Ładowanie edytora...
Pokaż wskazówkę

Konstruktor domyślny nie przyjmuje argumentów: `Point() { x = 0; y = 0; }`.

Rozwiązanie dostępne po 3 próbach