Академический Документы
Профессиональный Документы
Культура Документы
2018/2019
Chapitre 3
1 ATEL
En programmation classique, pour demander une
opération sur un ou plusieurs objets, il faudra appeler
une fonction membre et lui passer en paramètres les
noms des objets. L’un d’eux sera l’objet courant et les
autres doivent être passées en paramètres :
Exemple
objet1.add ( objet2, objet3)
pour exprimer l’addition de l’objet2 à l’objet3 et mettre le
résultat dans objet1.
2
Ce type d’appel est contraignant pour l’utilisateur. On aimerait lui
donner la possibilité de continuer à utiliser l’opérateur « + » pour
demander l’addition entre deux objets.
Exemple
if ( etudiant1 < etudiant2 )….
Il faut définir ce qu’on entend par la relation < entre deux étudiants.
Ainsi, l’instruction :
Remarque :
la fonction operator+ a un seul paramètre de même type que l’objet
la fonction operator+ renvoie une valeur de même type que l’objet
Sa signature devrait être : classe operator+ ( const classe & )
5
Surcharge par une fonction membre
Par exemple, la surcharge des opérateurs + et = par des fonctions membres
de la classe Matrice s’écrit :
9
La surcharge de l’opérateur + se fait de la manière
suivante. Remarquer que la fonction renvoie un
objet par valeur, et qu’elle déclare un objet interne
de travail. Le paramètre est passé par référence
pour éviter de faire une copie de l’objet.
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] = matrice[i][j] + c.matrice[i][j];
return m;
}
10
Le compilateur C++ construit par défaut un opérateur
d’affectation ‘‘bête’’. Pour disposer d’un opérateur
d’affectation particulier, il vaut mieux en définir un.
L’opérateur d’affectation est obligatoirement une
fonction membre et il doit fonctionner correctement
dans les deux cas suivants :
21
int main()
{
bidon x (150), y ;
y=x++;
cout << “\ny = “<<y.data << "x = "<< x.data;
y=++x;
cout << “\ny = “<<y.data << "x = "<< x.data;
}
Résultat :
y = 150 x = 151
y = 152 x = 152
22