Vai al contenuto
eLearner.app
Modulo 4 · Lezione 2 di 210/18 nel corso~12 min
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.
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;
}

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:

Code
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).
Code
class ResourceManager {
public:
    ~ResourceManager() {
        // Codice di pulizia
        std::cout << "Risorse liberate." << std::endl;
    }
};

Prova tu

Esercizio#cpp.m4.l2.e1
Tentativi: 0Caricamento…

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.

Caricamento editor…
Mostra suggerimento

Il costruttore ha lo stesso nome della classe e non specifica alcun tipo di ritorno, nemmeno `void`.

Soluzione disponibile dopo 3 tentativi

Esercizio#cpp.m4.l2.e2
Tentativi: 0Caricamento…

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.

Caricamento editor…
Mostra suggerimento

Il costruttore di default non prende argomenti: `Point() { x = 0; y = 0; }`.

Soluzione disponibile dopo 3 tentativi