Lezioni del modulo (2/2)
Costruttori e Distruttori
I costruttori e i distruttori sono funzioni membro speciali che gestiscono il ciclo di vita degli oggetti: la loro creazione (inizializzazione) e la loro distruzione (rilascio delle risorse).
I Costruttori
Un costruttore viene chiamato automaticamente quando un oggetto della classe viene creato in memoria.
- Ha lo stesso nome della classe.
- Non ha tipo di ritorno (nemmeno
void). - Può essere sovraccaricato (overloaded) per accettare diversi set di parametri.
#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;
}
Costruttore di Default
Se non definisci alcun costruttore, il compilatore C++ ne genera uno di default senza parametri. Tuttavia, se scrivi un costruttore personalizzato con parametri, il costruttore di default automatico non viene più generato, e dovrai definirlo esplicitamente se ti serve:
class Point {
public:
int x;
int y;
// Costruttore di default esplicito
Point() {
x = 0;
y = 0;
}
};
I Distruttori
Un distruttore viene chiamato automaticamente quando l'oggetto esce dallo scope o viene esplicitamente rimosso dalla memoria.
- Ha lo stesso nome della classe preceduto da una tilde
~(es.~Item()). - Non accetta parametri e non ha tipo di ritorno.
- Viene usato per rilasciare risorse occupate (es. chiudere file, liberare memoria allocata dinamicamente).
class ResourceManager {
public:
~ResourceManager() {
// Codice di pulizia
std::cout << "Risorse liberate." << std::endl;
}
};
Prova tu
Definisci una classe User con un membro privato std::string username. Aggiungi un costruttore pubblico che accetta una stringa (User(std::string name)) e la usa per inizializzare username. Aggiungi un getter pubblico std::string getUsername() che restituisce username. Nel main crea un User passandogli 'Alice' come nome e stampa l'username ottenuto usando std::cout.
Mostra suggerimento
Il costruttore ha lo stesso nome della classe e non specifica alcun tipo di ritorno, nemmeno `void`.
Soluzione disponibile dopo 3 tentativi
Definisci una classe Point con due membri pubblici interi x e y. Aggiungi un costruttore di default (senza parametri) che inizializza x e y a 0. Nel main crea un oggetto Point usando il costruttore di default e stampa x e y.
Mostra suggerimento
Il costruttore di default non prende argomenti: `Point() { x = 0; y = 0; }`.
Soluzione disponibile dopo 3 tentativi