Règles de déclaration des constructeurs
Un constructeur porte le même nom que sa classe. Un certain nombre de constructeurs peuvent être déclarés conformément aux règles des fonctions surchargées. (Pour plus d'informations, consultez Surcharge.)
class-name ( argument-declaration-list )
Notes
La argument-declaration-list peut être vide.
C++ définit deux genres particuliers de constructeurs, les constructeurs par défaut et les constructeurs de copie, décrits dans le tableau suivant.
Constructeurs par défaut et constructeurs de copie
Type de construction |
Arguments |
Objectif |
---|---|---|
Constructeur par défaut |
Peut être appelé sans argument |
Construire un objet par défaut du type de classe. |
Constructeur de copie |
Peut accepter un argument unique de référence au même type de classe |
Copier les objets du type de classe |
Les constructeurs par défaut peuvent être appelés sans argument. Toutefois, vous pouvez déclarer un constructeur avec une liste d'arguments si tous les arguments ont des valeurs par défaut. De même, les constructeurs de copie doivent accepter un argument unique de référence au même type de classe. Plus d'arguments peuvent être fournis si tous les arguments suivants ont des valeurs par défaut.
Si vous ne fournissez pas de constructeur, le compilateur tente de générer un constructeur par défaut. Si vous ne fournissez pas de constructeur de copie, le compilateur tente d'en générer un. Ces constructeurs générés par le compilateur sont considérés comme des fonctions membres publiques. Une erreur est générée si vous spécifiez un constructeur de copie avec un premier argument qui est un objet et non une référence.
Un constructeur par défaut généré par le compilateur installe l'objet (initialise des vftables et des vbtables, comme décrit précédemment), et il appelle les constructeurs par défaut pour les classes de base et les membres mais il n'effectue aucune autre action. Les constructeurs de classe de base et membres sont appelés uniquement s'ils existent, sont accessibles, et sont non équivoques.
Un constructeur de copie généré par le compilateur installe un nouvel objet et effectue une copie de membre du contenu de l'objet à copier. Si les constructeurs de classe de base ou membres existent, ils sont appelés. Sinon, une copie binaire est effectuée.
Si toutes les classes de base et membres d'une classe type possèdent des constructeurs de copie qui acceptent un argument const, le constructeur de copie généré par le compilateur accepte un seul argument de type const type**&. Sinon, le constructeur de copie généré par le compilateur n'accepte un argument unique de type type&**.
Vous pouvez utiliser un constructeur pour initialiser un objet const ou volatile, mais le constructeur lui-même ne peut pas être déclaré comme const ou volatile. La seule classe de stockage autorisée pour un constructeur est inline. L'utilisation de tout autre modificateur de classe de stockage, notamment le mot clé __declspec, avec un constructeur entraîne une erreur du compilateur.
La convention d'appel de stdcall est utilisée sur les fonctions membres statiques et les fonctions globales déclarées avec le mot clé __stdcall , et qui n'utilisent pas de liste d'arguments variable. Lorsque vous utilisez le mot clé __stdcall sur une fonction membre non statique, telle qu'un constructeur, le compilateur utilise la convention d'appel thiscall.
Les constructeurs de classes de base ne sont pas héritées par les classes dérivées. Lorsqu'un objet de type de classe dérivée est créé, il est construit en commençant par les composants de classe de base. Il passe ensuite aux composants de classe dérivée. Le compilateur utilise chaque constructeur de classe de base au fur et à mesure que l'objet complet est initialisé (sauf en cas de dérivation virtuelle, comme décrit dans Initialisation des classes de base).