Nous allons définir les quatre opérations de base pour la classe fraction
. Pour cela, il suffit de nommer operator+
, operator-
, etc., les fonctions opératoires :
class fraction { long num, den; // numérateur, dénominateur public : fraction(long numer, long denom = 1) { num = numer; den = denom; } friend fraction operator+(fraction, fraction); friend fraction operator-(fraction, fraction); friend fraction operator*(fraction, fraction); friend fraction operator/(fraction, fraction); }; inline fraction operator+(fraction f1, fraction f2){ return fraction(f1.num*f2.den + f1.den*f2.num, f2.den*f1.den);}inline fraction operator-(fraction f1, fraction f2){ return fraction(f1.num*f2.den - f1.den*f2.num, f2.den*f1.den);}inline fraction operator*(fraction f1, fraction f2){ return fraction(f1.num*f2.num, f2.den*f1.den);}inline fraction operator/(fraction f1, fraction f2){ return fraction(f1.num*f2.den, f2.num*f1.den);}
On peut alors écrire :
fraction f = 1 + 2/fraction(5) - fraction(1,3)*8;
La précédence des opérateurs reste la même (voir tableau en annexe), si bien que f
vaut 1 +2/5 -((1/3)*8)
, soit -4/15
. Noter quon peut écrire 2/fraction(5)
, ou fraction(2)/5
, ou fraction(2)/fraction(5)
, ou encore fraction(2, 5)
(qui cependant a un sens différent car il ny a pas dopération exécutée dans ce cas), mais il ne faut pas écrire 2/5
qui donnerait une division entière normale (soit 0
ici).
Il reste possible demployer le nom complet des opérateurs, comme ceci :
fraction f = operator-(operator+(1, operator/(2, fraction(5)), operator*(fraction(1,3), 8));
ce qui donne le même résultat mais est évidemment peu rentable. Cela indique toutefois clairement dans quel ordre les opérations sont exécutées.
Exercice 7.1 | Combien de fonctions sont-elles appelées dans lexpression précédente ? Et quelle est la place mémoire occupée au total ? |
Voir solution |
Les opérateurs redéfinis peuvent aussi être écrits comme des fonctions membres :
class fraction { // ... fraction operator+(fraction f) { return fraction(num*f.den + den*f.num, den*f.den); }
Nous verrons en fin de chapitre comment choisir lune ou lautre déclaration.
Exercice 7.2 | Que se passe-t-il si lon additionne |
Voir solution |
Précédent | Sommaire | Suivant |