C++ Constructeur de classe & Destructeur
Constructeur de classe
ClasseConstructeurUn constructeur est une fonction membre spéciale d'une classe, automatiquement exécutée chaque fois qu'un nouvel objet de la classe est créé.
Le nom du constructeur est exactement le même que le nom de la classe, et il n'a pas de type de retour (pas mêmevoidsignifie que b est un tableau d'objets de la classe AB, contenant 3 objets ; par conséquent, le constructeur est appelé 3 fois ;
signifie que p est un tableau de pointeurs d'objets de la classe AB, contenant 4 pointeurs d'objets de classe ; aucun constructeur n'est appelé.
L'exemple suivant aide à mieux comprendre le concept de constructeurs :
Exemple
Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :
Object is being created Length of line : 6
Constructeurs paramétrés
Le constructeur par défaut n'a aucun paramètre, mais si nécessaire, les constructeurs peuvent aussi avoir des paramètres. De cette façon, des valeurs initiales sont attribuées à l'objet lors de sa création, sans qu'il soit nécessaire d'effectuer un appel séparésetfonctions, comme le montre l'exemple suivant :
Exemple
Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :
Object is being created, length = 10 Length of line : 10 Length of line : 6
Utilisation de listes d'initialisation pour initialiser des champs
C++ recommande d'utiliserla liste d'initialisation des membrespour initialiser les variables membres. Sa syntaxe consiste à ajouter un deux-points après la liste des paramètres du constructeur,:), puis écrivezmember variable name (initial value)。
Dans l'exemple suivant,: length(len)signifie : utiliser le paramètre passélenpour initialiser directement les variables membreslength. RemarquecoutCe qui est affiché est la variable membrelength, plutôt qu'un paramètrelence qui vous permet de vérifier intuitivement que les variables membres ont été correctement affectées :
La syntaxe ci-dessus est équivalente à l'affectation suivante dans le corps de la fonction ; les deux produisent exactement le même résultat :
La différence entre les deux approches est que la liste d'initialisation effectue l'initialisation des variables membres avant d'entrer dans le corps de la fonction,avanttandis que l'affectation à l'intérieur du corps de la fonction construit d'abord par défaut puis affecte, ce qui constitue une étape supplémentaire. Pourconstles membres const, les membres référence et les membres objet sans constructeur par défaut, la liste d'initialisation estl'uniqueméthode d'initialisation.
Supposons qu'il existe une classe C avec plusieurs champs X, Y, Z, etc. qui doivent être initialisés ; séparez simplement les différents champs par des virgules, comme indiqué ci-dessous :
Remarque :L'ordre d'initialisation des membres dans la liste d'initialisation est déterminé par leur ordre dans la classe,l'ordre de déclarationet non par l'ordre dans lequel ils sont écrits. Il est recommandé de les garder cohérents pour éviter toute confusion.
Destructeur de classe
ClassedestructeurUn destructeur est une fonction membre spéciale d'une classe. À la fin de la durée de vie d'un objet (lorsqu'il sort de la portée ou estdeletesupprimé), il est automatiquement exécuté pour libérer les ressources occupées par l'objet (telles que la mémoire dynamique, les descripteurs de fichiers, etc.).
Le nom du destructeur est exactement le même que le nom de la classe, sauf qu'un tilde (~) est ajouté devant lui~comme préfixe. Il ne renvoie aucune valeur, ne peut avoir aucun paramètre, et chaque classe ne peut avoir qu'un seul destructeur.
L'exemple suivant aide à mieux comprendre le concept de destructeurs :
Exemple
Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :
Object is being created Length of line : 6 Object is being deletedautres extensions