#ifndef RATIONAL_H #define RATIONAL_H #include #include using namespace std::rel_ops; class Rational{ public: explicit Rational(const int& num = 0,const int& denom = 1); int getDenominator() const; int getNumerator() const; operator double() const {return numerator / denominator;} const Rational& operator+=(const Rational& rat); const Rational& operator+() const; const Rational operator+(const Rational& rat) const; const Rational& operator++(); const Rational operator++(int); const Rational& operator-=(const Rational& rat); const Rational operator-() const; const Rational operator-(const Rational& rat) const; const Rational& operator--(); const Rational operator--(int); const Rational& operator*=(const Rational& rat); const Rational operator*(const Rational& rat) const; const Rational& operator/=(const Rational& rat); const Rational operator/(const Rational& rat) const; private: int numerator, denominator; void reduce(); friend bool operator==(const Rational&, const Rational&); friend bool operator<(const Rational&, const Rational&); }; const Rational operator+(int lhs, const Rational& rhs); const Rational operator+(const Rational& lhs, int rhs); const Rational operator-(int lhs, const Rational& rhs); const Rational operator-(const Rational& lhs, int rhs); const Rational operator*(int lhs, const Rational& rhs); const Rational operator*(const Rational& lhs, int rhs); const Rational operator/(int lhs, const Rational& rhs); const Rational operator/(const Rational& lhs, int rhs); bool operator==(const Rational& lhs, const Rational& rhs); bool operator<(const Rational& lhs, const Rational& rhs); std::ostream& operator<<(std::ostream& os, const Rational& rat); #endif