Menu
Coddy logo textTech

Costruttore predefinito

Fa parte della sezione Programmazione orientata agli oggetti del percorso C++ di Coddy. Lezione 18 di 104.

Un costruttore predefinito è un costruttore che può essere chiamato senza argomenti. Inizializza un oggetto quando non vengono forniti valori iniziali. Ogni classe ha bisogno di un modo per creare oggetti in uno stato predefinito valido.

Se non definisci alcun costruttore, il compilatore genera un costruttore predefinito implicito che non fa nulla per i tipi primitivi e chiama i costruttori predefiniti per gli oggetti membro.

class Player {
    int health;
    int score;
public:
    Player() {           // Costruttore predefinito
        health = 100;
        score = 0;
    }
};

Player p1;               // Chiama il costruttore predefinito
Player p2{};             // Chiama anche il costruttore predefinito

Una volta definito un qualsiasi costruttore (come uno con parametri), il compilatore non genera più un costruttore predefinito. Se ti serve ancora, devi definirne uno esplicitamente.

class Enemy {
    int damage;
public:
    Enemy(int d) : damage(d) {}  // Solo costruttore parametrizzato
};

Enemy e1(10);    // Funziona
Enemy e2;        // Errore! Nessun costruttore predefinito

In C++ moderno, puoi richiedere esplicitamente il costruttore predefinito generato dal compilatore usando = default:

class Item {
    int id;
public:
    Item() = default;           // Il compilatore genera il costruttore predefinito
    Item(int i) : id(i) {}
};

I costruttori predefiniti sono essenziali per creare array di oggetti e per le classi utilizzate in contenitori come std::vector, che potrebbero dover costruire elementi senza argomenti.

challenge icon

Sfida

Facile

Costruiamo un semplice sistema di contatori che mostra come i costruttori predefiniti inizializzino gli oggetti in uno stato iniziale valido.

Creerai due file per organizzare il codice:

  • Counter.h: definisci una classe Counter che tiene traccia di un conteggio. La classe dovrebbe avere:
    • Un attributo privato count (intero)
    • Un attributo privato name (stringa) per identificare il contatore
    • Un costruttore predefinito che inizializza count a 0 e name a "Unnamed", poi stampa "Counter created: <name>"
    • Un metodo increment() che aumenta il conteggio di 1
    • Un metodo getCount() che restituisce il conteggio corrente
    • Un metodo getName() che restituisce il nome del contatore
  • main.cpp: mostra che i costruttori predefiniti funzionano quando si creano oggetti in modi diversi. Leggi un numero dall'input che indica quante volte incrementare il contatore, poi:
    • Crea un Counter usando l'inizializzazione diretta: Counter c1;
    • Crea un altro Counter usando l'inizializzazione con parentesi graffe: Counter c2{};
    • Incrementa c1 il numero di volte specificato dall'input
    • Stampa "<name>: <count>" per c1
    • Stampa "<name>: <count>" per c2

Entrambi i contatori dovrebbero iniziare da 0 grazie al costruttore predefinito, ma verrà incrementato solo c1. Questo mostra come i costruttori predefiniti assicurino che ogni oggetto inizi in uno stato prevedibile e valido, indipendentemente da come viene creato.

Includi il tuo file header in main.cpp usando #include "Counter.h".

Provalo tu

#include <iostream>
#include "Counter.h"

using namespace std;

int main() {
    // Leggi il numero di volte in cui incrementare
    int n;
    cin >> n;

    // TODO: Crea un Counter usando l'inizializzazione diretta: Counter c1;

    // TODO: Crea un altro Counter usando l'inizializzazione con parentesi graffe: Counter c2{};

    // TODO: Incrementa c1 il numero di volte specificato da n

    // TODO: Stampa "<name>: <count>" per c1

    // TODO: Stampa "<name>: <count>" per c2

    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C++ online