
Listing 1

//
// rational.h
//
#include <stdio.h>

class rational
    {
public:
    rational() { }
    rational(long n) : num(n), denom(1) { }
    rational(long n, long d) : num(n), denom(d) { }
    rational &operator+=(rational r);
    rational &operator-=(rational r);
    rational &operator*=(rational r);
    rational &operator/=(rational r);
    rational operator+() { return *this; }
    rational operator-();
    rational operator++() { return *this += 1; }
    rational operator--() { return *this -= 1; }
    rational operator++(int);
    rational operator--(int);
    void put(FILE *);
private:
    long num, denom;
    void simplify();
    };

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;
    }


