C'est une question très fondamentale, je l'ai recherchée, mais je veux juste demander à cette communauté que nous avons tous les deux constructeurs code> et méthodes code>. Mais normalement, nous utilisons le constructeur pour initialiser les variables au lieu des méthodes. Je pense que les deux peuvent être utilisés pour initialiser les variables. Alors, quelle est la différence de base entre les deux. Y a-t-il une raison solide?
C'est une question très fondamentale, alors gardez-la pour des raisons de débutant.
Merci d'avance .. p>
7 Réponses :
La différence la plus importante: Lorsque vous instaniez un objet, le constructeur sera invoqué alors que l'appel d'une méthode est toujours facultatif. Vous pouvez donc oublier d'appeler votre méthode d'initialisation et ne pas tout initialiser correctement.
Par exemple, toutes ces méthodes normales d'instanciation d'un objet appelleront le constructeur p> ou Si vous avez des arguments obligatoires, ne définissez pas un constructeur par défaut et nécessite plutôt une construction avec des paramètres: p> Cela présente l'avantage de nécessiter les arguments avant même d'instancier la classe. Donc, vous êtes obligé de faire: p> et omet de construire avec des arguments valides devient une erreur de compilateur: p> Donc, dans la mesure du possible, errez toujours sur le côté de votre initialisation dans un constructeur. Il y a quelques cas où un constructeur pourrait ne pas être viable. Par exemple, le seul moyen d'échouer d'un constructeur consiste à utiliser une exception. L'échec à construire peut être «routinier» et non vraiment exceptionnel. Les exceptions peuvent également être coûteuses sur certaines architectures. Un autre cas pourrait être lorsque vous souhaitez vous assurer que les méthodes virtuelles sont entièrement liées, ce qui est garanti pour être vrai uniquement après la construction. P> P>
En fait, je demande à l'initialisation avec certaines valeurs demandées par l'utilisateur, supposons que, à des fins de simulation, nous devons initialiser environ 20 variables aux valeurs données. Si j'initialise chaque variable correctement, alors dans ce cas, allez-vous coller à votre argument?
@kashmirileLégion voir mes modifications. Si vous devez initialiser 20 variables, vous pouvez définir un constructeur qui prend 20 variables ou une structure.
Ils ne peuvent pas tous deux être utilisés pour initialiser les variables des membres. C'est le travail du constructeur d'initialiser les membres, et il est appelé automatiquement chaque fois que vous créez une nouvelle instance.
Considérez les éléments suivants: P> sans le constructeur, ne serait aucun moyen d'initialiser le membre x code>. p> p>
Ce qui est bien et bon jusqu'à ce que vous ayez besoin de retourner un code d'erreur au moment de l'exécution. : P
+1 pour votre bonne réponse. MERCI VOTRE ARGUMENT DONNÉ DE LA FORCE DE L'INTÉGOIRE DE FAIRE DE FAÇON CLAIR DES CONSTRUCTEURS.
Le constructeur est invoqué automatiquement lorsque vous créez l'objet contrairement à une fonction. En outre, le constructeur est utilisé pour indiquer em> l'intention de cela pour l'initialisation de l'objet. P>
Imaginez que vous avez une variable de membre qui n'a pas de constructeur vide. Ensuite, vous n'avez aucune autre option mais pour l'initialiser dans la liste d'initialistes de votre constructeur. p>
Le constructeur est également appelé lorsque vous allouez un tableau avec le nouvel opérateur, tandis que l'initialisation avec des méthodes rendra le code de manière plus compliquée. P>
En général, la logique complexe dans le constructeur n'est pas très bonne idée, mais une simple initialisation doit être effectuée là-bas (les choses que vous devez faire pour vous assurer que votre objet est dans un état valide). p>
Les constructeurs sont appelés automatiquement, il n'est donc pas nécessaire de s'inquiéter de savoir si l'utilisateur a invoqué une méthode d'initialisation encore. Cependant, le Guide de style Google a quelque chose à dire sur les constructeurs : p>
La recommandation de Google est d'avoir une initiation simple dans un constructeur et une initiation non triviale dans une méthode distincte. P>
Ce qui est bien et bon, à moins que vous soyez un fan d'objets immuables.
L'argument principal pour suivre le guide de style C ++ de Google semble être le grand nom. Je n'aime pas totalement leur vue sur (non) en utilisant des exceptions. Si vous n'utilisez pas d'exceptions, vous utilisez un style très similaire de C ++. Un expert C ++ bien connu une fois dit: www2.research.att.com/~bs/ 3RD_Safe0.html Pour répondre à votre liste à bulleted: (1) Ensuite, utilisez simplement des exceptions (vous venez de découvrir qu'il est essentiel d'utiliser des constructeurs / Raii) (2) à nouveau, vous n'aurez pas un objet invalide si vous lancez. Une exception (3) Je suis d'accord, certains problèmes méchants peuvent survenir, le compilateur devrait vous avertir. (4) Donc, aucun code dans les constructeurs?
Initialisation des variables n'est pas un doute, une pratique de programmation très importante. Lorsque vous utilisez des classes, l'option consiste à les initialiser à l'intérieur des méthodes. Ainsi, nous avons deux étapes: - p>
Mais si "l'appel de la méthode" est oublié, les variables finissent par avoir des valeurs indésirables. Pour rendre la vie plus facile pour le programmeur, le concept d'une méthode de constructeur a été introduit. P>
avec constructeurs, nous avons juste une étape: - p>
La «partie appelante» est effectuée automatiquement chaque fois qu'un nouvel objet de la classe est créé. P>
Les constructeurs peuvent être utilisés pour une gestion efficace de la mémoire, ce qui n'est pas possible avec des fonctions. P>
Destructor peut être utilisé pour détruire les constructeurs lorsqu'il n'est pas nécessaire. P>
De plus, l'utilisation de Copy Constructor est connue pour empêcher les difficultés ou les erreurs dues à des erreurs de la mémoire. P>