Vidéo: Héritage multiple (1) : concept et constructeurs 2024
Le constructeur est une fonction spéciale que C ++ invoque automatiquement lorsqu'un objet est créé pour permettre à l'objet de s'initialiser. Il existe deux variantes particulières du constructeur: les constructeurs de mouvement copy et .
Un constructeur de copie est le constructeur que C ++ utilise pour faire des copies d'objets. Il porte le nom X:: X (const X &), où X est le nom de la classe. C'est-à-dire que c'est le constructeur de classe X, qui prend comme argument une référence à un objet de classe X . Cela semble vraiment inutile, mais prenez juste une minute pour explorer pourquoi C ++ a besoin de telles bêtes.
Réfléchissez un instant à ce qui se passe lorsque vous appelez une fonction comme suit:
void fn (Student fs) {// … même scénario; argument différent …} int main (int argcs, char * pArgs []) {Étudiant ms; fn (ms); return 0;}
Dans l'appel de fn (), C ++ transmet une copie de l'objet ms et non l'objet lui-même.
Considérons maintenant ce que signifie créer une copie d'un objet. Tout d'abord, il faut un constructeur pour créer un objet, même une copie d'un objet existant. C ++ peut créer un constructeur de copie par défaut qui copie l'objet existant dans le nouvel objet un octet à la fois.
C'est ce que font les anciennes langues comme C. Mais que faire si la classe ne veut pas une simple copie de l'objet? Et si quelque chose d'autre est nécessaire? (Ignorer le "pourquoi?" Pour un petit moment.) La classe doit être capable de spécifier exactement comment la copie doit être créée.
Ainsi, C ++ utilise un constructeur de copie dans l'exemple précédent pour créer une copie de l'objet ms sur la pile lors de l'appel de la fonction fn (). Ce constructeur de copie particulier serait Student:: Student (Student &) - disons que trois fois rapidement.