On appelle opérateurs des fonctions à deux arguments donc le premier a la particularité de se trouver devant la fonction lorsqu'on l'appelle. Par exemple la fonction qui retourne la somme de deux entiers, comme dans:
int a = 3 + 4;
peut être vue comme une fonction operator+()
dont la déclaration ressemblerait à:
int operator+(int x, int y);
Le symbole =
de l'affectation désigne également une fonction. Par exemple dans:
int a;
a = 4;
l'affectation peut être vu comme un appel à la fonction:
int operator=(int& x, int y);
qui prendrait comme argument une référence sur la variable de gauche (pour pouvoir modifier son contenu) ainsi qu'une valeur de type int
. La fonction renvoie un int
(une copie du contenu de x
) afin de pouvoir utiliser l'écriture condensée b = a = 4;
si b
est un autre int
dont on veut qu'il vale également 4.
Les opérateurs courants sur les int
sont:
a + b
a - b
a * b
a / b
(attention cela renvoie un entier, donc tronque le résultat)
a = b;
a += b;
(équivalente à a = ( a + b );
)
a -= b;
a *= b;
a /= b;
-a
(appelé moins unitaire)
a++;
(équivalente à a += 1;
)
a--;
(équivalente à a -= 1;
)
a % b
retourne a modulo b.
Des opérateurs similaires existent sur les autres types (double
, float
, long
, etc.). Dans le cas où un opérateur courant est appelé sur des variables de types différents (par exemple un int
et un double
), le compilateur choisit l'opérateur sur le type qui a le plus de précision (donc ici double
), sauf bien entendu s'il s'agit d'un opérateur d'affectation auquel cas le membre de droite sera copié dans une variable temporaire du bon type. Ainsi:
2 / 5.
appelle l'opérateur de division sur les double
int a; a = 4.3;
convertit 4.3
en un int
de valeur 4
et affecte 4
à a
.