Exood4 Studio - Video Game Development, Toulouse (France)
Exood4 Studios Exood4 Tutorials

   
L a n g a g e   C++

S u r c h a r g e    d ' o p é r a t e u r s






Le principe de surcharge


 La surcharge des opérateurs consiste à définir le comportement d'un opérateur appliqué à un objet. On ne peut pas changer la pluralité des opérateurs, ni leur priorité (voir priorité des opérateurs en C)



Le mécanisme de surcharge des opérateurs


 Notation : operator op() (op étant le symbole de l'opérateur à surcharger)


Exemple : * produit scalaire de 2 points, + addition de 2 points

class point
{
private :
 float abscisse, ordonnee;

public :
 point();
 point(float,float);

 void afficher ();

 point operator + (point);
 float operator * (point);
};

point point::operator +(point p)
{
 point resultat;

 resultat.abscisse = abscisse + p.abscisse;
 resultat.ordonnee = ordonnee + p.ordonnee;

 return resultat;
}

float point::operator *(point p)
{
 return (abscisse * p.abscisse + ordonnee * p.ordonnee);
}

Exemple de programme client :

void main ()
{
 point a(2.0, 3.0), b(1.0, 2.0), c;

 c = a + b;
 c.afficher ();
 cout << "Produit scalaire : " << a * b << "\n";
}

 a*b peut également s'écrire : a.operator *(b)


Les opérateurs de conversion


1) Conversion d'un type prédéfini ou existant vers un autre type

Exemple : conversion d'un réel en un point

class point
{
...

public :
 point (float);

 point operator + (point);
};

point::point (float x)
{
 abscisse = x;
 ordonnee = 0.0;
}

void main ()
{
 point c;

 c = 3.2;
 c.afficher (); // 3.2,0.0
 c = c + 2.5; // 2.5 devient (2.5,0.0)
 c.afficher (); // 5.7,0.0
}


2) Conversion du type classe vers un type existant ou prédéfini

Notation : operator identificateur_de_type()


Exemple : conversion d'un point en un réel

class point
{
...

public :
 ...

 operator float();
};

point::operator float()
{
 return abscisse;
}

void main ()
{
 point c(3.2, 5.0);
 float val;

 val = c;
 cout << val; // 3.2
 val = val + c; // 6.4
}



  Retour en haut de page Page suivante