Bonsoir,
Veuillez m’excuser pour mon sujet qui est sans doute dans la mauvaise catégorie, mais je n’ai pas trouvé l’endroit pour le rédiger si ce n’est ici.
Mon désaccord porte sur le cours de C++ de informaticienzero et mehdidou99 au chapitre "Reprendrez-vous un peu de sucre syntaxique ?" : https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/decoupons-tout-ca/reprendriez-vous-un-peu-de-sucre-syntaxique/ et plus exactement ici : https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/decoupons-tout-ca/reprendriez-vous-un-peu-de-sucre-syntaxique/#:~:text=bool%20operator%3D%3D(Fraction,denominateur%20%3D%3D%20droite.denominateur%3B%0A%7D
En effet, la fonction écrite est plus compliquée qu’elle ne devrait l’être, puisqu’un test inutile est effectué.
Vérifier gauche.denominateur == droite.denominateur
revient à vérifier a.denominateur * b.denominateur == b.denominateur * a.denominateur
, ce qui est tautologique (à cause de la commutativité de la multiplication).
(Il suffit de se souvenir que a a/b = c/d ssi a*d = b*c)
La fonction s’écrit donc simplement :
bool operator==(Fraction const & a, Fraction const & b)
{
return a.numerateur * b.denominateur == a.denominateur * b.numerateur;
}
J’espère ne pas avoir fait d’erreur (car je suis fatigué à cette heure, mais cela ne m’excuserait pas).
Edit : Je viens de m’apercevoir en lisant la suite du code que vous n’avez pas pris en compte le fait que les numérateurs et dénominateurs pouvaient être négatifs. Ainsi les comparaisons <, <=, > et >= sont fausses. Il faudrait par exemple remplacer les types en entiers non signés (ou bien modifier les fonctions de comparaison).
Bref, c’était un détail qui a retenu mon attention, mais en dehors de cela, je trouve le cours très bien fait et je vous en remercie !
Bonne continuation et bonne soirée.