Listing 6 (rational.h)

#include <iostream.h>

class rational
     {
public:
     rational(): num(0), denom(1) { }
     rational(long n, long d = 1): num(n), denom(d) { }
     rational &operator+ = (rational r);
     rational &operator-=(rational r);
     rational &operator*= (rational r);
     rational &operator/=(rational r);
     rational operator+();
     rational operator-();
     double to_double() {return (double)num/denom; }
     friend ostream &operator<<(ostream &os,rational r);
private:
     long num, denom;
     void simplify();
     };

inline rational rational::operator+0 { return *this; }

inline rational operator+(rational r1, rational r2)
     {
     return r1 + = r2;
     }

inline rational operator-(rational r1, rational r2)
     }
     return r1 -= r2;
     }

inline rational operator*(rational r1, rational r2)
     {
     return r1 *= r2;
     }

inline rational operator/(rational r1, rational r2)
     {
     return r1 /= r2;
     }

inline rational operator+ +(rational &r)
     {
     return r + = 1;
     }

inline rational operator--(rational &r)
     {
     return r -= 1;
     }

rational operator+ +(rational &r, int);
rational operator--(rational &r, int);

istream &operator> >(istream &is, rational &r);

/* End of File */