Condividi tramite


Inizializzazione di oggetti membro

Le classi possono contenere oggetti membro di tipo di classe, ma per assicurarsi che le richieste di inizializzazione degli oggetti membro siano soddisfatte, una delle seguenti condizioni deve essere soddisfatta:

  • La classe dell'oggetto contenuto non richiede alcun costruttore.

  • La classe dell'oggetto contenuto dispone di un costruttore predefinito accessibile.

  • Tutti i costruttori della classe contenitore inizializzano in modo esplicito l'oggetto contenuto.

Nell'esempio seguente viene mostrato come eseguire un'inizializzazione di questo tipo.

// spec1_initializing_member_objects.cpp
// Declare a class Point.
class Point
{
public:
    Point( int x, int y ) { _x = x; _y = y; }
private:
    int _x, _y;
};

// Declare a rectangle class that contains objects of type Point.
class Rect
{
public:
    Rect( int x1, int y1, int x2, int y2 );
private:
    Point _topleft, _bottomright;
};

//  Define the constructor for class Rect. This constructor
//   explicitly initializes the objects of type Point.
Rect::Rect( int x1, int y1, int x2, int y2 ) :
_topleft( x1, y1 ), _bottomright( x2, y2 )
{
}

int main()
{
}

La classe Rect, illustrata nell'esempio precedente, contiene due oggetti membro della classe Point. Il costruttore inizializza in modo esplicito gli oggetti _topleft e _bottomright. Si noti che i due punti seguono la parentesi di chiusura del costruttore (nella definizione). I due punti sono seguiti dai nomi dei membri e dagli argomenti con cui inizializzare gli oggetti di tipo Point.

Nota

L'ordine in cui gli inizializzatori di membri sono specificati nel costruttore non influisce sull'ordine in cui i membri vengono costruiti; i membri vengono costruiti nell'ordine in cui vengono dichiarati nella classe.

Il riferimento e gli oggetti membro const devono essere inizializzati utilizzando la sintassi di inizializzazione dei membri illustrata nella sezione della grammatica in Inizializzazione di basi e membri. Non esiste un altro modo per inizializzare questi oggetti.

Vedere anche

Riferimenti

Inizializzazione di classi base e membri