Aujourd'hui, un ami m'a demandé pourquoi nous avons besoin de constructeurs en C++. Alors que nous pouvons faire la même chose dans un langage structurel. Quelle est la spécialité des constructeurs, montrez-moi la nécessité des constructeurs pour que je les utilise dans mon programme C++. Merci de m'aider et de me donner quelques exemples afin que je puisse lever ses doutes.
Réponses
Trop de publicités?Vous n'avez pas besoin de la même manière qu'on ne peut pas construire des besoin la plupart des caractéristiques des langues courantes.
Les constructeurs existent pour rendre plus difficile l'exécution des tâches suivantes La mauvaise chose . Dans ce cas, il s'agit d'utiliser des données qui n'ont pas été initialisées.
Une réponse pathologique est que les constructeurs ne modifient pas la complétude de Turing du langage, de sorte que, au sens strict, vous n'en avez pas besoin, puisque vous n'avez pas besoin de nombreuses caractéristiques du langage. Mais il s'agit là d'une réponse formelle plutôt que pratique. On vous excusera de ne pas vous sentir plus chaud le soir en ne pensant qu'à la théorie.
Un bon exemple pratique de l'utilité des constructeurs est le modèle RAII. En ayant un constructeur, vous encapsulez très bien l'initialisation et l'acquisition au même endroit que la destruction. Le langage C, qui n'a pas de constructeurs, est célèbre pour les programmeurs qui oublient une étape de ce processus.
Comme d'autres l'ont déjà répondu, vous utilisez le constructeur de la même manière que vous utiliseriez une fonction init dans un langage procédural, mais grâce aux constructeurs, il n'y a aucune chance que le programmeur oublie d'appeler la fonction init - le compilateur le fait pour lui. Un avantage supplémentaire, outre le fait de l'appeler automatiquement, est la résolution gracieuse de l'ambiguïté de la fonction l'héritage problème d'initialisation : dans le cas d'une classe A qui étend la classe B qui étend la classe C, vous avez la garantie que les trois constructeurs (pour les classes A, B et C) seront appelés et qu'ils le seront dans le bon ordre (classe C, puis classe B, puis classe A) de sorte que chaque constructeur peut déjà utiliser toutes les données de la superclasse (puisqu'elles ont déjà été initialisées). Dans le cas d'un langage sans constructeurs, le programmeur devrait s'occuper de toute cette comptabilité.
Dans un langage procédural, vous devez également initialiser les variables à une valeur bien définie. Généralement avec une sorte de Init
fonction. Et un constructeur est un moyen de s'assurer que lorsque vous créez un objet, il est initialisé dans un état valide.
En .net, vous pouvez contourner les constructeurs (avec un code privilégié), et vous obtiendrez un objet dont les champs sont initialisés à 0.
C'est ainsi que fonctionnent les langages orientés objet. En C, vous utiliseriez malloc pour allouer de la mémoire, puis initialiser cette mémoire d'une manière ou d'une autre. En C++, le constructeur fait les deux choses. En combinant ces deux éléments, il est plus difficile pour le développeur d'allouer de la mémoire et d'omettre ou d'oublier de l'initialiser.
- Réponses précédentes
- Plus de réponses