0Pricing
C++ Academy · Lezione

Costruttori e liste di inizializzazione dei membri

Inizializzi i membri in modo ordinato usando le liste di inizializzazione dei membri

Costruttori e liste di inizializzazione dei membri è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Che cos'è un costruttore?

Un costruttore è un metodo speciale che viene eseguito quando viene creato un oggetto. Ha lo stesso nome della classe e non ha un tipo restituito.

class Point {
public:
    Point() {              // default constructor
        x_ = 0;
        y_ = 0;
    }
private:
    int x_, y_;
};

Costruttori con parametri

I costruttori possono accettare parametri e possono esistere più overload.

class Point {
    int x_, y_;
public:
    Point() : x_(0), y_(0) {}
    Point(int x, int y) : x_(x), y_(y) {}
};

Liste di inizializzazione dei membri

La sintassi : member(value) prima del corpo è una lista di inizializzazione dei membri. I membri vengono inizializzati qui, non assegnati successivamente all'interno del corpo.

class Person {
    std::string name_;
    int age_;
public:
    Person(std::string n, int a) : name_(std::move(n)), age_(a) {}
};

Perché utilizzare le liste di inizializzazione

I membri vengono costruiti esattamente una volta con il valore corretto. Senza la lista, vengono costruiti con il costruttore predefinito e poi viene loro assegnato un valore: è uno spreco per i tipi non banali.

Ordine di inizializzazione

I membri vengono inizializzati nell'ordine in cui sono dichiarati nella classe, non nell'ordine della lista di inizializzazione. Faccia corrispondere i due ordini per evitare confusione.

Inizializzatori predefiniti nella classe (C++11)

È possibile assegnare valori predefiniti ai membri direttamente nel corpo della classe. È utile quando la maggior parte dei costruttori condivide gli stessi valori predefiniti.

class Buffer {
    size_t size_ = 0;
    char* data_ = nullptr;
public:
    Buffer() = default;
    Buffer(size_t n) : size_(n), data_(new char[n]) {}
};

= default e = delete

Chieda al compilatore di fornire o rimuovere un membro speciale:

class Widget {
public:
    Widget() = default;          // compiler-generated default
    Widget(const Widget&) = delete;  // disable copy
};

Costruttori deleganti (C++11)

Un costruttore può chiamare un altro costruttore della stessa classe per condividere la logica di inizializzazione.

class Box {
    int w_, h_, d_;
public:
    Box(int w, int h, int d) : w_(w), h_(h), d_(d) {}
    Box() : Box(1, 1, 1) {}      // delegates to the 3-arg ctor
};

Costruttori espliciti

I costruttori con un solo argomento possono essere utilizzati nelle conversioni implicite. Li contrassegni con explicit per impedire conversioni impreviste.

class Vector {
public:
    explicit Vector(size_t n);
};
Vector v = 10;          // ERROR: explicit prevents this
Vector v(10);            // OK

Distruttori

Il distruttore ~ClassName() viene eseguito quando un oggetto viene distrutto. Lo utilizzi per rilasciare risorse, come file, socket e memoria grezza.

La regola del cinque (anteprima)

Se scrive una qualsiasi delle funzioni membro speciali (distruttore, costruttore di copia, operatore di assegnazione per copia, costruttore di spostamento, operatore di assegnazione per spostamento), consideri tutte e cinque. L'argomento viene trattato nel corso sulla semantica dello spostamento.

Verifica rapida

Che cosa determina l'ordine in cui vengono inizializzati i membri di una classe?

Riepilogo

Utilizzi i costruttori per impostare lo stato degli oggetti. Preferisca le liste di inizializzazione dei membri alle assegnazioni nel corpo. Contrassegni i costruttori con un solo argomento come explicit e utilizzi = default / = delete per comunicare l'intento.

Domande Frequenti

La lezione «Costruttori e liste di inizializzazione dei membri» è gratuita?

Sì — il testo completo di «Costruttori e liste di inizializzazione dei membri» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «Costruttori e liste di inizializzazione dei membri»?

Inizializzi i membri in modo ordinato usando le liste di inizializzazione dei membri Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Costruttori e liste di inizializzazione dei membri»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. struct e class: quando usare ciascuno
  2. Variabili membro e metodi
  3. Costruttori e liste di inizializzazione dei membri
  4. Il puntatore this e l'incapsulamento
← Torna a C++ Academy