Surcharge d’opérateur
La operator
mot clé déclare une fonction spécifiant ce que signifie l’opérateur-symbole lorsqu’elle est appliquée aux instances d’une classe. Cela donne à l'opérateur plusieurs significations ou le « surcharge ». Le compilateur fait la distinction entre les différentes significations d’un opérateur en examinant les types de ses opérandes.
Syntaxe
type
operator
operator-symbol(parameter-list)
Notes
Vous pouvez redéfinir la fonction de la plupart des opérateurs intégrés de manière globale ou classe par classe. Les opérateurs surchargés sont implémentés en tant que fonctions.
Le nom d’un opérateur surchargé est operator
x, où x est l’opérateur tel qu’il apparaît dans le tableau suivant. Par exemple, pour surcharger l’opérateur d’ajout, vous définissez une fonction appelée operator+. De même, pour surcharger l’opérateur addition/affectation, +=définissez une fonction appelée operator+=.
Opérateurs redéfinissables
Opérateur | Nom | Type |
---|---|---|
, | Virgule | Binaire |
! | NOT logique | Unaire |
!= | Inégalité | Binaire |
% | Modulo | Binaire |
%= | Assignation de modulo | Binaire |
& | ET au niveau du bit | Binaire |
& | Adresse-de | Unaire |
&& | ET logique | Binaire |
&= | Assignation d'opération AND au niveau du bit | Binaire |
( ) | Appel de fonction | — |
( ) | Opérateur de conversion | Unaire |
* |
Multiplication | Binaire |
* |
Déréférencement du pointeur | Unaire |
*= |
Assignation de multiplication | Binaire |
+ | Addition | Binaire |
+ | Plus unaire | Unaire |
++ | Incrémenter 1 | Unaire |
+= | Assignation d'addition | Binaire |
- | Soustraction | Binaire |
- | Négation unaire | Unaire |
-- | Décrémentation 1 | Unaire |
-= | Assignation de soustraction | Binaire |
-> | Sélection de membres | Binaire |
->* |
Sélection de pointeur de membre | Binaire |
/ | Division | Binaire |
/= | Assignation de division | Binaire |
< | Inférieur(e) à | Binaire |
<< | Décalage vers la gauche | Binaire |
<<= | Assignation de décalage vers la gauche | Binaire |
<= | Inférieur ou égal à | Binaire |
= | Affectation | Binaire |
== | Égalité | Binaire |
> | Supérieur(e) à | Binaire |
>= | Supérieur ou égal à | Binaire |
>> | Décalage vers la droite | Binaire |
>>= | Assignation de décalage vers la droite | Binaire |
[ ] | Indice de tableau | — |
^ | OR exclusive | Binaire |
^= | Assignation OR exclusive | Binaire |
| | Opération OR inclusive au niveau du bit | Binaire |
|= | Assignation d'opération OR inclusive au niveau du bit | Binaire |
|| | OU logique | Binaire |
~ | Complément à 1 | Unaire |
delete |
Supprimer | — |
new |
Nouvelle | — |
opérateurs de conversion | opérateurs de conversion | Unaire |
1 Deux versions des opérateurs d’incrément et de décrémentation unaire existent : préincrement et postincrement.
Pour plus d’informations, consultez Règles générales pour la surcharge des opérateurs. Les contraintes sur les différentes catégories d'opérateurs surchargés sont décrites dans les rubriques suivantes :
Les opérateurs indiqués dans le tableau suivant ne peuvent pas être surchargés. Le tableau inclut les symboles # de préprocesseur et ##.
Opérateurs non redéfinissables
Opérateur | Nom |
---|---|
. | Sélection de membres |
.* |
Sélection de pointeur de membre |
:: | Résolution de portée |
? : | Conditions |
# | Préprocesseur convertir en type string |
## | Préprocesseur concaténer |
Bien que les opérateurs surchargés soient généralement appelés implicitement par le compilateur quand ils sont trouvés dans le code, ils peuvent être invoqués explicitement de la même façon que n'importe quelle fonction membre ou non membre :
Point pt;
pt.operator+( 3 ); // Call addition operator to add 3 to pt.
Exemple
L’exemple suivant surcharge l’opérateur + pour ajouter deux nombres complexes et retourne le résultat.
// operator_overloading.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
struct Complex {
Complex( double r, double i ) : re(r), im(i) {}
Complex operator+( Complex &other );
void Display( ) { cout << re << ", " << im << endl; }
private:
double re, im;
};
// Operator overloaded using a member function
Complex Complex::operator+( Complex &other ) {
return Complex( re + other.re, im + other.im );
}
int main() {
Complex a = Complex( 1.2, 3.4 );
Complex b = Complex( 5.6, 7.8 );
Complex c = Complex( 0.0, 0.0 );
c = a + b;
c.Display();
}
6.8, 11.2
Contenu de cette section
Voir aussi
Opérateurs intégrés, priorité et associativité C++
Mots clés
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour