Condividi tramite


Regole per la dichiarazione dei costruttori

Un costruttore ha lo stesso nome della classe.Qualsiasi numero di costruttori possono essere dichiarati ma regole di funzioni in overload.(Per ulteriori informazioni, vedere L'overload).

class-name  (  argument-declaration-list  )

Note

argument-declaration-list può essere vuoto.

C++ vengono definiti due tipi speciali di costruttori, impostazione predefinita e costruttori di copia, descritti nella tabella seguente.

impostazione predefinita e costruttori di copia

tipo di costruzione

Argomenti

Scopo

Costruttore predefinito

Può essere chiamato senza argomenti

Costruire un oggetto predefinito con tipo di classe

costruttore di copia

Accetta un unico argomento di riferimento allo stesso tipo di classe

Oggetti di copia del tipo di classe

I costruttori predefiniti possono essere chiamati senza argomenti.Tuttavia, è possibile dichiarare un costruttore predefinito con un elenco di argomenti, se tutti gli argomenti hanno impostazioni predefinite.Analogamente, i costruttori di copia devono accettare un unico argomento di riferimento allo stesso tipo della classe.Più argomenti possono essere forniti, dato che tutti gli argomenti successivi hanno impostazioni predefinite.

Se non viene fornito alcun costruttore, il compilatore tenta di generare un costruttore predefinito.Se non viene fornito un costruttore di copia, il compilatore tenta di generare uno.Questi costruttori generati dal compilatore vengono considerati funzioni membro pubbliche.Verrà generato un errore se si specifica un costruttore di copia con un primo argomento è un oggetto e non un riferimento.

Un costruttore predefinito generato dal compilatore ha installato l'oggetto (inizializza i vftables e vbtables, come descritto in precedenza e vengono chiamati i costruttori predefiniti per le classi base e i membri, ma non esegue altre operazioni.I costruttori di membri e della classe base sono chiamati solo se presenti, sono accessibili e sono inequivocabili.

Un costruttore di copia generato dal compilatore ha installato un nuovo oggetto ed esegue una copia membro per membro del contenuto dell'oggetto da copiare.Se i costruttori di membro o della classe base presenti, sono denominati; in caso contrario, la copia bit per bit viene eseguita.

Se tutte le classi di membri e di base di una classe tipo disporre di un costruttore di copia che accettano un oggetto const l'argomento, il costruttore di copia generato dal compilatore accetta un unico argomento di tipo const tipo&.In caso contrario, il costruttore di copia generato dal compilatore accetta un unico argomento di tipo tipo&.

È possibile utilizzare un costruttore per inizializzare un oggetto const o volatile oggetto, ma il costruttore non può essere dichiarato come const o volatile.L'unica classe di archiviazione ammessa per un costruttore viene inline; utilizzo di qualsiasi altro modificatore di classe di archiviazione, inclusi __declspec la parola chiave, con un costruttore generato un errore del compilatore.

La convenzione di chiamata di stdcall viene utilizzata nelle funzioni membro static e sulle funzioni globali dichiarate con __stdcall la parola chiave e che non utilizzano un elenco di argomenti variabile.Quando si utilizzano __stdcall la parola chiave in una funzione membro non static, ad esempio un costruttore, il compilatore utilizzerà la convenzione di chiamata del thiscall„.

I costruttori delle classi base non vengono ereditati dalle classi derivate.Quando un oggetto di tipo classe derivata è stato creato, è avviare costruito con i componenti della classe base; quindi passa ai componenti della classe derivata.Il compilatore utilizza ogni costruttore della classe base come parte dell'intero oggetto viene inizializzata (eccetto nei casi di derivazione virtuale, come descritto in inizializzare le classi di base).

Vedere anche

Riferimenti

Costruttori (C++)