C++ Surcharge des opérateurs et surcharge des fonctions
C++ permet à une certaine [fonction] dans la même portéeFonctionetOpérateursde spécifier plusieurs définitions, appelées respectivementSurcharge de fonctionetSurcharge d'opérateur。
Une déclaration de surcharge est une déclaration qui a le même nom qu'une fonction ou méthode précédemment déclarée dans cette portée, mais leurs listes de paramètres et définitions (implémentations) sont différentes.
Lorsque vous appelez unefonction surchargéeouun opérateur surchargé, le compilateur décide quelle définition est la plus appropriée en comparant les types de paramètres que vous utilisez avec les types de paramètres dans la définition. Le processus de sélection de la fonction surchargée ou de l'opérateur surchargé le plus approprié est appeléRésolution de surcharge。
Surcharge de fonctions en C++
Dans la même portée, vous pouvez déclarer plusieurs fonctions ayant une fonctionnalité similaire et le même nom, mais ces fonctions de même nom doivent avoir des paramètres formels différents (faisant référence au nombre, au type ou à l'ordre des paramètres). Vous ne pouvez pas surcharger des fonctions en vous basant uniquement sur des types de retour différents.
Dans l'exemple suivant, les fonctions portant le même nomprint()sont utilisées pour afficher différents types de données :
Exemple
Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :
整数为: 5 浮点数为: 500.263 字符串为: Hello C++
Surcharge des opérateurs en C++
Vous pouvez redéfinir ou surcharger la plupart des opérateurs intégrés de C++. De cette façon, vous pouvez utiliser des opérateurs avec des types personnalisés.
Les opérateurs surchargés sont des fonctions avec des noms spéciaux. Le nom de la fonction est composé du mot-clé `operator` suivi du symbole de l'opérateur à surcharger. Comme les autres fonctions, un opérateur surchargé a un type de retour et une liste de paramètres.
Box operator+(const Box&);
Déclarez l'opérateur d'addition pour additionner deux objets Box et renvoyer l'objet Box final. La plupart des opérateurs surchargés peuvent être définis comme des fonctions ordinaires non membres ou comme des fonctions membres de classe. Si nous définissons la fonction ci-dessus comme une fonction non membre de la classe, nous devons alors passer deux paramètres pour chaque opération, comme indiqué ci-dessous :
Box operator+(const Box&, const Box&);
L'exemple suivant démontre le concept de surcharge d'opérateurs à l'aide de fonctions membres. Ici, les objets sont passés comme arguments, et les propriétés de l'objet sont accessibles en utilisantthisl'opérateur, comme indiqué ci-dessous :
Exemple
Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :
Volume of Box1 : 210 Volume of Box2 : 1560 Volume of Box3 : 5400
Opérateurs surchargeables / Opérateurs non surchargeables
Voici une liste des opérateurs qui peuvent être surchargés :
| Opérateurs arithmétiques binaires | + (addition), - (soustraction), * (multiplication), / (division), % (modulo) |
| Opérateurs relationnels | == (égal à), != (différent de), < (inférieur à), > (supérieur à), <= (inférieur ou égal à), >= (supérieur ou égal à) |
| Opérateurs logiques | || (OU logique), && (ET logique), ! (NON logique) |
| Opérateur unaire | + (positif), - (négatif), * (déréférencement), & (adresse de) |
| Opérateurs d'incrémentation et de décrémentation | ++ (incrémentation), -- (décrémentation) |
| Opérateurs bit à bit | | (OU bit à bit), & (ET bit à bit), ~ (NON bit à bit), ^ (OU exclusif bit à bit), << (décalage à gauche), >> (décalage à droite) |
| Opérateurs d'affectation | =, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>= |
| Allocation et libération de mémoire | new, delete, new[ ] , delete[] |
| Autres opérateurs | ()(appel de fonction),->(accès aux membres),,(virgule),[](indice) |
Voici une liste d'opérateurs qui ne peuvent pas être surchargés :
- .Opérateur d'accès aux membres
- .*, ->*Opérateur d'accès au membre via pointeur
- ::: opérateur de portée
- sizeof: opérateur de longueur
- ?:: opérateur conditionnel
- #: symbole de prétraitement
Exemple de surcharge d'opérateur
Ce qui suit fournit divers exemples de surcharge d'opérateurs pour vous aider à mieux comprendre le concept de surcharge.