Partager via


Surcharge d'opérateur

Le mot clé operator déclare une fonction spécifiant la signification de operator-symbol quand il est appliqué 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.

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 operatorx, où x désigne l'opérateur tel qu'il apparaît dans le tableau suivant. Par exemple, pour surcharger l'opérateur d'addition, vous définissez une fonction appelée operator+. De la même façon, pour surcharger l'opérateur d'addition/assignation, +=, vous 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

&

Opération de bits AND

Binaire

&

Adresse-de

Unaire

&&

AND logique

Binaire

&=

Assignation d'opération AND au niveau du bit

Binaire

( )

Appel de fonction

( )

Opérateur de cast

Unaire

*

Multiplication

Binaire

*

Déréférencement du pointeur

Unaire

*=

Assignation de multiplication

Binaire

+

Addition

Binaire

+

Plus unaire

Unaire

++

Incrément 1

Unaire

+=

Assignation d'addition

Binaire

Soustraction

Binaire

Négation unaire

Unaire

––

Décrément 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 à

Binaire

<<

Décalage vers la gauche

Binaire

<<=

Assignation de décalage vers la gauche

Binaire

<=

Inférieur ou égal à

Binaire

=

Assignation

Binaire

==

Égalité

Binaire

>

Supérieur à

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 de bits OR inclusive

Binaire

|=

Assignation d'opération OR inclusive au niveau du bit

Binaire

||

OR logique

Binaire

~

Complément à 1

Unaire

delete

Delete

new

New

conversion operators

opérateurs de conversion

Unaire

1   Il existe deux versions des opérateurs d'incrémentation et de décrémentation unaire : préincrément et postincrément.

Voir Règles générales pour la surcharge d'opérateur pour plus d'informations. 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

Operator

Name

.

Sélection de membres

.*

Sélection de pointeur de membre

::

Résolution de portée

? :

Conditionnel

#

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 additionner 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();
}

Sortie

6.8, 11.2

Voir aussi

Référence

Opérateurs C++

Mots clés C++