Listing 2 (rational.cpp)

#include "mylib.h"
#include "rat1.h"

rational &rational::operator+=(rational r)
       {
       num = num * r.denom + r.num * denom;
       denom *= r.denom;
       simplify();
       return *this;
       }

rational &rational::operator-=(rational r)
       {
       num = num * r.denom - r.num * denom;
       denom *= r.denom;
       simplify();
       return *this;
       }

rational &rational::operator*=(rational r)
       {
       num *= r.num;
       denom *= r.denom;
       simplify();
       return *this;
       }

rational &rational::operator/=(rational r)
       {
       num *= r.denom;
       denom *= r.num;
       simplify();
       return *this;
       }

rational rational::operator+(rational r)
       {
       rational result(*this);
       return result += r;
       }

rational rational::operator-(rational r)
       {
       rational result(*this);
       return result -= r;
       }

rational rational::operator*(rational r)
       {
       rational result(*this);
       return result *= r;
       }

rational rational::operator/(rational r)
       {
       rational result(*this);
       return result /= r;
       }

void rational::put(FILE *f)
       {
       fprintf(f,"(%ld/%ld)", num, denom);
       }

void rational::simplify()
       {
       long x = gcd(num, denom);
       num /= x;
       denom /= x;
       }

// End of File