/////// File Fraction.h /////// // With friend operator s, I/O operator s, and user-defined conversions #include class Fraction { friend Fraction operator +(const Fraction&,int); public: Fraction() { } Fraction(int n, int d, int reduce=1); // d is not zero void read(istream& in = cin); // input fraction void display(ostream& out = cout) const ; // display fraction operator double() { return ( double(num)/double(denom) ); } // conversion to double Fraction operator + (const Fraction& y) const ; Fraction operator - () const ; // unary negation Fraction operator - (const Fraction& y) const ; Fraction operator * (const Fraction& y) const ; Fraction operator / (const Fraction& y) const ; int operator == (const Fraction& y) const ; int operator > (const Fraction& y) const ; int operator < (const Fraction& y) const ; int operator >= (const Fraction& y) const ; int operator <= (const Fraction& y) const ; int is_zero() const ; int is_one() const ; int is_int() const ; int floor() const ; int ceiling() const ; int operator [] (unsigned int i); // must be member private: int num; int denom; }; ostream& operator <<(ostream& out, Fraction& x); istream& operator >>(istream& in, Fraction& x); inline Fraction operator *(const Fraction& fra, int i) { return(fra*Fraction(1,i)); } inline void Fraction::display(ostream& out /*= cout*/) const { out << num << "/" << denom; } inline int Fraction:: operator ==(const Fraction& y) const { return( num == y.num && denom == y.denom ); } inline int Fraction::is_zero() const { return ( denom == 1 && num == 0 ); } inline int Fraction::is_one() const { return ( denom == 1 && num == 1 ); } inline int Fraction::is_int() const { return ( denom == 1 ); }