// Implementation of a rational number class

#include <iostream.h>
#include <assert.h>
#include "rational2.h"

// Define the + operation
Rational operator+ (Rational r1, Rational r2)
{  Rational r;
   r.numerator = (r1.numerator * r2.denominator) +
                 (r1.denominator * r2.numerator);
   r.denominator = r1.denominator * r2.denominator;
   return r;
}

Rational::Rational (int num, int denom)
  :numerator (num),            /* initialize numerator and denominator */
   denominator (denom)         /* with the specified values num and denom */
{ /* an error results if denom == 0 */
  assert (denom != 0);
}

// Define the I/O operations
void Rational::read(void)
{ /* only numbers of the form num/denom, with denom!=0 are legal */
  char divSign;      /* use divSign to read the / symbol within the input */
  cin >> numerator >> divSign >> denominator;
  assert (divSign == '/');
  assert (denominator != 0);
}

void Rational::print(void)
{  cout << numerator << " / " << denominator;
}

// Define decimal division
double Rational::eval (void)
{ return ((double) numerator / (double) denominator);
}
