71 votes

Quelle est l'utilisation de la surcharge const en C ++?

En C++, une fonction de signature dépend, en partie, sur qu'il soit ou non const. Cela signifie qu'une classe peut avoir deux fonctions de membre avec des signatures identiques, sauf que l'un est const et l'autre ne l'est pas. Si vous avez une classe comme ça, alors le compilateur décidera de la fonction d'appel en fonction de l'objet que vous l'appelez sur: si c'est un const instance de la classe, de la const version de la fonction sera appelé; si l'objet n'est pas const, l'autre version sera appelée.

Dans quelles circonstances vous voulez profiter de cette fonctionnalité?

39voto

Dima Points 19888

- Ce vraiment n'a de sens que lorsque le membre de la fonction retourne un pointeur ou une référence à un membre de données de votre classe (ou un membre d'un membre ou d'un membre de membre de membre, etc...). Généralement, de retour de non-const pointeurs ou des références à des membres de données est mal vu, mais il est parfois raisonnable, ou tout simplement très pratique (par exemple, opérateur []). Dans de tels cas, vous devez fournir un const et non const versions de la lecture. De cette façon, la décision de savoir si ou non l'objet peut être modifié incombe à la fonction à l'aide de ce, qui a le choix de le déclarer const ou non-const.

26voto

Bill the Lizard Points 147311

C'est là que vous pouvez faire appliquer le compilateur, que vous retourniez un objet const ou régulier, tout en conservant la même signature de méthode. Il y a une explication en profondeur ici .

9voto

RobH Points 2136

Regardez le comportement de std :: map :: operator []. La version const génère une erreur si vous essayez de référencer une clé non valide, mais la version non const effectue une insertion. Le comportement d'insertion est beaucoup plus pratique que d'avoir à utiliser std :: map :: insert (et fera un écrasement, en plus) mais ne peut pas fonctionner pour une carte const.

5voto

Jasper Bekkers Points 4949

Vous voudrez peut-être l'utiliser pour décider de renvoyer ou non une référence const à un objet. Les conteneurs de la STL utilisent les fonctions begin () et end () surchargées pour décider de renvoyer un const_iterator ou un itérateur normal.

0voto

Rahul Points 1

on peut utiliser le même nom pour différentes tâches de fonctions en langage de programmation. somme de 2 nombres et 3 nombres sont des processus différents. son opération facile, mais plus similaire dans les fonctions, est difficile à identifier. Nous utilisons donc la surcharge de fonctions. même nom avec des paramètres différents

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