Académique Documents
Professionnel Documents
Culture Documents
Ainsi, l'écriture "a op b" est traduite en langage C++ par un appel :
op(a, b);
opérandes. Un opérateur est représenté par un nom composé du mot operator suivi
+ - * / & ^ &
| ~ ! = < > +=
-= *= /= %= ^= &= |=
:: . .* ?:
1
Lorsqu’on surcharge les opérateurs il est très important qu’ils aient une
Pour surcharger un opérateur ‘op’, il faut définir une fonction de nom : ‘operator
op’.
Syntaxe :
#include <iostream>
using namespace std;
class point
{
int x,y;
public :
point(int, int);
void afficher();
//la surcharge des opérateurs + et *
point operator + (point);
point operator * (int);
};
2
{
cout << "x = " << x << " \t y=" << y << endl;
}
point::point(int a=0,int b=0)
{
x=a;
y=b;
}
point point::operator+(point p1)
{
point p;
p.x=x+p1.x;
p.y=y+p1.y;
return p;
}
point point::operator*(int a)
{
point p;
p.x=x*a;
p.y=y*a;
return p;
}
main()
{
point o1(5,10);
point o2(15,20);
point R1=o2.operator+(o1);
R1.afficher();
R1.afficher();
point R2=o1.operator*(5);
R2.afficher();
R2=(o2+o1)*2;
R2.afficher();
}
3
Remarques :
à la fonction operator+.
#include <iostream>
using namespace std;
class point
{
int x,y;
public :
point(int, int);
void afficher();
//la surcharge des opérateurs + et *
friend point operator + (point,point);
friend point operator * (point,int);
};
void point :: afficher()
{
cout << "x = " << x << " \t y=" << y << endl;
}
point::point(int a=0,int b=0)
{ x=a; y=b; }
point operator+(point p1, point p2)
{
point p;
p.x=p1.x+p2.x;
p.y=p1.y+p2.y;
return p;
}
point operator*(point p1, int a)
{
point p;
p.x=p1.x*a;
p.y=p1.y*a;
return p;
}
4
main()
{
point o1(5,10);
point o2(15,20);
point R1=operator+(o1, o2);
R1.afficher();
R1=o1+o2;
R1.afficher();
point R2=operator*(o1, 2);
R2.afficher();
R2=o1*2;
R2.afficher();
}
#include <iostream>
using namespace std;
class point
{
int x,y;
public :
point(int, int);
void afficher();
//la surcharge des opérateurs > et <=
bool operator > (point);
bool operator <=(point);
};
5
point::point(int a=0,int b=0)
{
x=a;
y=b;
}
bool point::operator>(point p1)
{
if(x>p1.x)
return true;
else
return false;
}
main()
{
point o1(5,10);
point o2(15,20);
if(o1>o2)
cout << "ok" << endl;
else
cout << "Non OK" << endl;
if(o1<=o2)
cout << "ok" << endl;
else
cout << "Non OK" << endl;
}
6
4. Surcharge des opérateurs d'accès
L’opérateur [] permet de modifier la valeur d’un élément de la matrice, ou d’y
#include <iostream>
using namespace std;
class tableau
{
int ne;
int *p;
public :
tableau(int n, int *t)
{
ne=n;
p=new int[ne];
for(int i=0;i<ne;i++)
p[i]=t[i];
}
void affiche()
{
for(int i=0;i<ne;i++)
cout<<p[i]<<"\t";
cout<<endl;
}
int valeur(int i)
{
return p[i]; }
int operator[](int n)
{
7
return p[n];
}
~tableau(){
cout << "libiration de la memoire";
delete []p;}
};
main()
{
int *t = new int[3];
for(int i=0; i<3; i++)
t[i]=i+1;
tableau t1(3, t);
t1.affiche();
cout<<t1[1]<<endl;
cout << t1.valeur(1) << endl;
}
Remarques :
Les opérateurs = () [] −> new delete ne peuvent être surchargés que comme des
fonctions membres.
#include <iostream>
8
using namespace std;
class tableau
{
int ne;
int *p;
public :
tableau(int n, int *t)
{
ne=n;
p=new int[ne];
for(int i=0;i<ne;i++)
p[i]=t[i];
}
void affiche()
{for(int i=0;i<ne;i++)
cout<<p[i]<<"\t"; cout<<endl;}
~tableau(){
cout << "libiration de la memoire";
delete []p;}
};
main()
{
int *t = new int[3];
for(int i=0; i<3; i++)
t[i]=i+1;
tableau t1(3, t);
t1.affiche();
cout<<t1(2)<<endl;}
Les deux opérateurs << et >>, déjà surdéfinis au sein des classes istream et
ostream pour les différents types de base, peuvent être surdéfinis pour n'importe
quel type classe créé par l'utilisateur. Pour ce faire, il suffit de tenir compte des
remarques suivantes :
9
Ces opérateurs doivent recevoir un flot en premier argument, ce qui empêche
prototype de la forme :
#include <iostream>
using namespace std;
class point
{
int x,y;
public:
point(int a=0,int b=0)
{x=a; y=b;}
void affiche()
{cout << "x = " << x << " & y=" << y << endl; }
10
main()
{
point p1(10, 10);
point p2;
cout << p1;
cin>>p2;
cout << p2;
}
11