Correction 19
Surcharge des opérateurs.
Exercice 1 : encore un peu plus de polynômes
Cet exercice est de niveau 2 principalement en raison de sa longueur.
Pour la première partie, voir l'exercice 0.
Concernant la seconde partie :
- Ajoutez les opérateurs pour l'addition et la
soustraction :
À ajouter à la classe Polynome :
Polynome& operator+=(const Polynome&); Polynome& operator-=(const Polynome&); Polynome operator+(const Polynome&) const; Polynome operator-(const Polynome&) const;
Les opérateurs + et - sont effectivement const puisqu'il ne modifient pas la classe concernée mais crée un nouveau résultat.
Pour la définition des opérateurs, écrire hors de la classe :
La méthode simplifie est une méthode privée :
void Polynome::simplifie() { while ((!p.empty()) && (top() == 0.0)) p.pop_back(); if (p.empty()) p.push_back(0.0); }
Ajoutez les opérateurs de comparaison == et !=
bool Polynome::operator==(const Polynome& q) const { return p == q.p; } bool Polynome::operator!=(const Polynome& q) const { return p != q.p; }
Ajoutez une méthode top qui retourne la valeur du coefficient de plus haut degré du polynôme.
double top() const { return p[degre()]; }
Ajoutez maintenant la méthode (publique) divise()
void Polynome::divise(const Polynome& denominateur, Polynome& quotien, Polynome& reste) const { quotien = 0; reste = *this; for (Degre dq(reste.degre() - denominateur.degre()); (dq >= 0) // il est important ici que dq soit signé && (reste != 0); dq = reste.degre() - denominateur.degre()) { quotien.met_coef(reste.top() / denominateur.top(), dq); reste -= Polynome(dq, quotien.p[dq]) * denominateur; } }
Terminer en implémentant les opérateurs de division et modulo
Aucune surprise ici : prototypes :
Polynome& operator/=(const Polynome&); Polynome operator/(const Polynome&) const; Polynome operator%(const Polynome&) const;
Polynome Polynome::operator/(const Polynome& q) const { Polynome r,s; divise(q,r,s); return r; } Polynome Polynome::operator%(const Polynome& q) const { Polynome r,s; divise(q,r,s); return s; } Polynome& Polynome::operator/=(const Polynome& q) { return *this = *this / q; }
Vous trouverez ici le code complet (et même un peu plus).