Bonjour à tous
J'ai un exercice à faire en cours de C++ sur la surcharge des opérateur. Nous devons créer une classe Rationel ou Fraction et surcharger les opérateurs adéquates pour simplifier l'utilisation de la classe. J'ai donc créé une classe Fraction toute bête
Voila la définition des mes fonctions operator
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class Fraction { private: int num; int den; public: Fraction& operator=(const Fraction &); Fraction operator+(const Fraction &) friend operator+(const int &, const Fraction &); }
J'ai créé une fonction amie operator+ parce que je n'étais pas capable avec une fonction operator+ membre de la classe d'écrire un truc du style
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Fraction& Fraction::operator=(const Fraction &frac) { denominateur = frac.denominateur; numerateur = frac.numerateur; return *this; } Fraction Fraction::operator+(const Fraction &frac) { Fraction fr; fr.num = (num * frac.den) + (frac.num * den); fr.den = den * frac.den; return fr; } Fraction operator+(const int &entier, const Fraction &frac) { Fraction fr; fr.numerateur = frac.numerateur + entier * frac.denominateur; fr.denominateur = frac.denominateur; return fr; }
F1 = 1 + F2;
Alors que je pouvais écrire F1 = F2 + 1;
Et visiblement ma fonction amie fonctionne pour les deux cas de figure
F1 + 1 ou 1 + F1
Est ce c'est normal ? J'avais pensé au début qu'il fallait laisser la fonction membre pour le cas F1 + 1 et la fonction amie pour l'autre cas, et lorsque j'ai supprimé la fonction membre operator+ o surprise cela fonctionnait très bien aussi.
Partager