Listing 2 (rational.cpp)

#include "mylib.h"
#include "rational .h"

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

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

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

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

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