3 votes

Pourquoi avons-nous besoin de constructeurs ?

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.

10voto

Drew Dormann Points 25025

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.

3voto

jma Points 973

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.

3voto

Seramme Points 892

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é.

0voto

CodesInChaos Points 60274

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.

0voto

theglauber Points 4937

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X