Parce que l'un est const
et l'autre ne l'est pas. Ce sont des surcharges différentes, avec des signatures différentes. L'un ou l'autre est appelé, selon que l'objet sur lequel vous l'appelez est const
.
Exemple:
arbit x;
x.method1(); // calls the non-const version
arbit const &y = x;
y.method1(); // calls the const version
Vous devez déclarer un procédé tel que const
si elle ne modifie pas l'état (visible) de l'objet. Cela vous permet de distribuer des objets const arbit
et de vous assurer que personne ne les modifiera accidentellement.
Par exemple, vous feriez une fonction non setValue
const
(car il modifie l'objet), mais getValue
serait const
. Donc, sur un objet const
, vous pouvez appeler getValue
mais pas setValue
.
¹ Quand il y a une volonté, il y a un moyen, et il est appelé const_cast
. Mais oublie que je t'ai déjà dit.
Eh oui, C++ traite le const comme paramètre de surcharge – Digikata
Surcharger sur ' const' peut être très utile. Par exemple, consultez 'operator []' dans 'std :: vector'. –
Une fonction membre const peut être invoquée à la fois pour les objets const et et non const, tandis qu'une fonction membre non const peut être appelée uniquement pour les objets non const. \t Maintenant, comment puis-je appeler la version const de la fonction method1 à partir d'un objet non constant x. est-ce const_cast, qui peut faire l'opération désirée pour moi? – Amit