#include using namespace std; class Fraction { public: Fraction(int num = 0, int den = 1); void simplifie(); bool operator==(Fraction f) const; friend Fraction operator+(Fraction const &f1, Fraction const &f2); friend ostream &operator<<(ostream &os, Fraction const &f); private: int numerateur; int denominateur; }; Fraction::Fraction(int num, int den) : numerateur (num), denominateur (den) { simplifie(); } Fraction operator+ (Fraction const &f1, Fraction const &f2) { Fraction result; result.numerateur = f1.numerateur*f2.denominateur + f2.numerateur*f1.denominateur; result.denominateur = f1.denominateur*f2.denominateur; return result; } ostream &operator<<(ostream &os, Fraction const &f) { os << f.numerateur << '/' << f.denominateur; return os; } int pgcd(int m, int n) { while (m>0) { if( n > m ) { swap(m, n); } m -= n; } return n; } void Fraction::simplifie() { int r = pgcd(numerateur, denominateur); numerateur /= r; denominateur /= r; } bool Fraction::operator==(Fraction f) const { Fraction me = *this; me.simplifie(); f.simplifie(); return me.numerateur == f.numerateur && me.denominateur == f.denominateur; } int main() { Fraction f1(5, 4); Fraction f2(5, 2); Fraction f3 = f1+f2; cout << f3 << endl; if(f3 == Fraction(15,4)) { cout << "Les fractions sont identiques" << endl; } f3.simplifie(); cout << f3 << endl; }