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.
#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:
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).
class ResourceManager {
public:
~ResourceManager() {
// Codice di pulizia
std::cout << "Risorse liberate." << std::endl;
}
};
Spróbuj sam
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.
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
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.
Pokaż wskazówkę
Konstruktor domyślny nie przyjmuje argumentów: `Point() { x = 0; y = 0; }`.
Rozwiązanie dostępne po 3 próbach