Introduction à la surcharge d’opérateurs
Surcharge par une fonction membre
Surcharge par une fonction globale
Opérateur d’affectation
Surcharge de ++
Opérateurs de conversion
SURCHARGE D’OPERATEURS
Introduction à la surcharge d’opérateurs :
Le concepteur d’une classe doit fournir à l’utilisateur de celle ci toute une série d’opérateurs agissant sur les objets de la classe. Ceci permet une syntaxe intuitive de la classe.
Par exemple, il est plus intuitif et plus clair d’additionner deux matrices en surchargeant l’opérateur d’addition et en écrivant :
result = m0 + m1; que d’écrire matrice_add(result, m0, m1);
Règles d’utilisation :
Il faut veiller à respecter l’esprit de l’opérateur. Il faut faire avec les types utilisateurs des opérations identiques à celles que font les opérateurs avec les types prédéfinis.
La plupart des opérateurs sont surchargeables.
les opérateurs suivants ne sont pas surchargeables : :: . .* ?: sizeof
il n’est pas possible de :
changer sa priorité
changer son associativité
SURCHARGE PAR UNE FONCTION MEMBRE
Par exemple, la surcharge des opérateurs +et =par des fonctions membres de la classe Matrices’écrit :
const int dim1= 2, dim2 = 3; // dimensions de la Matrice
class Matrice { // matrice dim1 x dim2 d’entiers
public:
// …
Matrice operator=(const Matrice &n2);
Matrice operator+(const Matrice &n2);
// …
private:
int _matrice[dim1][dim2];
// …
};
// …
void main() {
Matrice b, c;
b + c ; // appel à : b.operator+( c );
a = b + c; // appel à : a.operator=( b.operator+( c ) );
}
Définition de la fonction membre operator+:
Matrice Matrice::operator+(const Matrice &c) {
Matrice m;
for(int i = 0; i < dim1; i++)
for(int j = 0; j < dim2; j++)
m._matrice[i][j] = this−>_matrice[i][j] + c._matrice[i][j];
return m;
}
……
Cours langage C (100 KO) (Cours PDF)