Académique Documents
Professionnel Documents
Culture Documents
Exemple
L'opérateur d'addition est utilisé pour additionner deux valeurs numériques. Supposons que a, b
et c soient trois variables entières. L'instruction suivante ajoutera le contenu de a et b et
stockera le résultat dans la variable c :
c=a+b;
L'opérateur d'addition sait déjà comment traiter les opérandes entiers. Mais il ne sait pas
comment traiter deux objets définis par l'utilisateur. L'instruction ci-dessus générera une erreur
si a, b et c sont des objets d'une classe. Cependant, la surcharge de l'opérateur peut
permettre à l'opérateur d'addition de manipuler deux objets.
Nous avons déclaré plus d'une fois que C++ essaie de faire en sorte que les types de données
définis par l'utilisateur se comportent à peu près de la même manière que les types intégrés. Par
exemple, C++ nous permet d'ajouter deux variables de types définis par l'utilisateur avec la
même syntaxe que celle appliquée aux types de base. Cela signifie que C++ a la capacité de
fournir aux opérateurs une signification spéciale pour un type de données. Le mécanisme
consistant à donner de telles significations spéciales à un opérateur est connu sous le nom de
surcharge d'opérateur.
▪ La surcharge d'opérateur est la capacité de dire au compilateur comment effectuer une
certaine opération en fonction du type de données de son opérateur correspondant.
▪ comme + effectue l'addition de deux nombres entiers, la concaténation de deux variables
de chaîne et fonctionne totalement différemment lorsqu'il est utilisé avec des objets de
classe de Time.
Déclaration de la surcharge d'un opérateur
Un opérateur peut être surchargé en déclarant une fonction membre spéciale dans la classe. La
fonction membre utilise le mot clé operator avec le symbole de l'opérateur à surcharger.
La syntaxe
La syntaxe de surcharge d'un opérateur est la suivante :
type_retour opérator op()
{
corps de fonction;
}
- type_retour indique le type de valeur renvoyé par la fonction membre.
- operator est le mot clé qui indique que la fonction membre est utilisée pour surcharger un
opérateur.
- op c'est le symbole de l'opérateur à surcharger.
Exemple
void operator ++()
{
corps de fonction;
}
La Surcharge des opérateurs unaires
Un type d'opérateur qui fonctionne avec un seul opérande est appelé opérateur unaire. Les
opérateurs unaires sont surchargés pour augmenter leurs capacités.
Les opérateurs unaires pouvant être surchargés en C++ sont les suivants :
+ - * ! ~ &
++ -- () -> new delete
Surcharge de l'opérateur ++
L'opérateur d'incrémentation ++ est un opérateur unaire. Il fonctionne avec un seul opérande. Il augmente la
valeur de l'opérande de 1. Il ne fonctionne qu'avec des valeurs numériques par défaut. Il peut être surchargé pour
lui permettre d'augmenter les valeurs des données membres d'un objet de la même manière.
Exemple Écrivez un programme qui surcharge l'opérateur d'incrémentation pour travailler avec des objets
définis par l'utilisateur.
#include<iostream> void operator++()
using namespace std; {
class Count n = n+1;
{ }
private: };
int n; int main()
public: {
Count() Count obj;
{ obj.show();
n = 0; ++obj;
} obj.show();
void show() return 0;
{ }
cout<< “ n= “ <<n<<endl;
}
Comment fonctionne le programme ci-dessus
Le programme ci-dessus surcharge l'opérateur d'incrémentation ++ pour travailler avec les objets de
toute la classe Count définie par l'utilisateur. Il augmente la valeur du membre de données n de 1.
L'utilisateur peut utiliser le même format pour augmenter la valeur de l'objet que celui utilisé avec
les entiers. La surcharge ci-dessus ne fonctionne qu'en notation préfixée.
Surcharge d'opérateur avec valeur renvoyée
L'opérateur d'incrémentation peut être utilisé dans l'instruction d'affectation pour stocker la valeur
incrémentée dans une autre variable. Supposons que a et b soient deux entiers. L'instruction suivante
incrémentera la valeur de a de 1, puis affectera la nouvelle valeur à b :
b=++a;
La fonctionnalité ci-dessus peut être affectée à l'opérateur en renvoyant la nouvelle valeur à partir de
la fonction membre. La valeur renvoyée peut être stockée dans un autre objet du même type sur le
côté gauche de l'opérateur d'affectation.
Exemple
Écrivez un programme qui surcharge l'opérateur d'incrémentation pour travailler avec des objets définis par
l'utilisateur. La fonction surchargée doit renvoyer un objet après avoir incrémenté le membre de données.
Count operator++()
class Count {
{ Count temp;
private: n = n+1;
temp.n = n;
int n;
return temp;
public: }
Count() };
int main()
{
{
n = 0; Count x, y ;
} x.show();
void show() y.show();
y = ++x ;
{ x.show();
cout<< “ n=”<<n<<endl; y.show();
} return 0 ;
}
Comment fonctionne le programme ci-dessus ?
Le programme ci-dessus surcharge l'opérateur d'incrémentation. La fonction membre
incrémente la valeur données membre n. Il stocke la valeur d'incrément dans l'objet
temporaire et renvoie l'objet. Il permet à l'utilisateur d'utiliser l'opérateur d'incrémentation
dans un opérateur d'affectation.
Surcharge des opérateurs binaires
Un type d'opérateur qui fonctionne avec deux opérandes est appelé opérateur binaire. Les
opérateurs binaires sont surchargés pour augmenter leurs capacités.
Les opérateurs binaires pouvant être surchargés en C++ sont les suivants :
+ - * / % & | ^ << >>
Les opérateurs arithmétiques binaires tels que +, -, *, / sont des opérateurs binaires. Ils
fonctionnent avec deux opérandes. Ces opérateurs peuvent être surchargés pour leur permettre
de travailler avec un objet défini par l'utilisateur de la même manière qu'ils travaillent avec
des types de base tels que int, long et float etc.
Exemple: Écrivez un programme qui surcharge l'opérateur d'addition binaire +.
#include<iostream>
using namespace std; Add operator +(Add p)
class Add {
{ Add temp;
private: temp.a = a + p.a;
int a, b; temp.b = b + p.b;
public: return temp;
Add() }
{ };
a = b = 0; int main()
} {
void in() Add x, y, z;
{ x.in();
cout<<” Enter a:”; y.in();
cin>>a; z = x + y;
cout<<” Enter b:”; x.show();
cin>>b; y.show();
} z.show();
void show() return 0;
{ }
cout<< ”a= ”<<a<<endl;
cout<< ”b= ”<<b<<endl;
}
Comment fonctionne le programme ci-dessus ?
NB: En règle générale, lors de la surcharge d'opérateurs binaires, l'opérande de gauche est
utilisé pour invoquer la fonction d'opérateur et l'opérande de droite est passé en argument.
Surcharge des opérateurs d'affectation arithmétique
// specification du box1 cout << "Volume du Box2 : " << volume << endl;
Box2.setLength(12.0); cout << "Volume du Box3 : " << volume << endl;
Box2.setBreadth(13.0); return 0 ;
Box2.setHeight(10.0); }