#include class Fraction { public: Fraction(int N=0, int D=1); Fraction(const Fraction&); Fraction& operator=(const Fraction&); operator double(); int numerator() const; int denominator() const; Fraction reciprocal() const; std::string toString(); Fraction& operator+= (const Fraction&); Fraction& operator+= (int); Fraction& operator-=(const Fraction&); Fraction& operator-=(int); Fraction& operator*=(const Fraction&); Fraction& operator*=(int); Fraction& operator/=(const Fraction&); Fraction& operator/=(int); ~Fraction(); private: void simplify(); int N; int D; }; int gcd(int, int); Fraction operator+ (const Fraction& left, const Fraction& right); Fraction operator+ (const Fraction&, int); Fraction operator+ (int, const Fraction& left); Fraction operator- (const Fraction& left, const Fraction& right); Fraction operator- (const Fraction&, int); Fraction operator- (int, const Fraction& left); Fraction operator* (int left, const Fraction& right); Fraction operator* (const Fraction& left, int right); Fraction operator* (const Fraction& left, const Fraction& right); Fraction operator/ (const Fraction& left, const Fraction& right);