Cours langage C surcharge d’opérateurs

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;
}
……

Si le lien ne fonctionne pas correctement, veuillez nous contacter (mentionner le lien dans votre message)
Cours langage C (100 KO) (Cours PDF)
Cours langage c

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *