Règles de déclaration des constructeurs
Un constructeur porte le même nom que sa classe.Plusieurs constructeurs peuvent être déclarés, conformément à les règles des fonctions surchargées.(Pour plus d'informations, consultez Surcharge.)
class-name ( argument-declaration-list )
Notes
argument-declaration-list peut être vide.
C++ définit deux genres particuliers de constructeurs, valeur par défaut et constructeurs de copie, décrits dans le tableau suivant.
valeur par défaut et constructeurs de copie
Type de construction |
Arguments |
Objectif |
---|---|---|
Constructeur par défaut. |
Peut être appelé sans argument |
construisez un objet par défaut du type de classe |
constructeur de copie |
peut recevoir un argument unique de référence au même type de classe |
objets de copie du type de classe |
Les constructeurs par défaut peuvent être appelées sans argument.Toutefois, vous pouvez déclarer un constructeur par défaut d'une liste d'arguments, si tous les arguments ont des valeurs par défaut.De même, les constructeurs de copie reçoit un argument unique de référence au même type de classe.Plusieurs arguments peuvent être fournis, fourni tous les arguments suivants ont des valeurs par défaut.
Si vous ne fournissez pas de constructeur, le compilateur essaie de générer un constructeur par défaut.Si vous ne fournissez pas de constructeur de copie, le compilateur essaie de 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 a installé 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 des 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 ne sont pas ambigus.
Un constructeur de copie généré par le compilateur a installé un nouvel objet et effectue une copie membre à membre du contenu de l'objet à copier.Si les constructeurs de classe de base ou membre existent, ils sont appelés ; sinon, la copie de bits est exécutée.
Si toutes les classes de base et membres d'une classe type ont des constructeurs de copie qui acceptent un argument de 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 accepte un seul argument de type type&**.
Vous pouvez utiliser un constructeur pour initialiser un objet de const ou d' volatile , mais le constructeur 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, y compris le mot clé d' __declspec , avec un constructeur entraîne une erreur du compilateur.
La convention d'appel de stdcall est utilisé sur les fonctions membre statique et les fonctions globales déclarées avec le mot clé de __stdcall , et qui n'utilisent pas de liste d'arguments variable.Lorsque vous utilisez le mot clé de __stdcall sur une fonction membre non static, telle qu'un constructeur, le compilateur utilise la convention d'appel de thiscall ».
Les constructeurs de classes de base ne sont pas héritées par les classes dérivées.Lorsqu'un objet de type classe dérivée est créé, il est construit commencer par les composants de classe de base ; il déplace aux composants de classe dérivée.Le compilateur utilise chaque constructeur de classe de base que cette partie de l'objet complet est initialisée (sauf en cas de la dérivation virtuelle, comme décrit dans initialiser des classes de base).