// Implementation of a rational number class

#include <iostream.h>
#include <assert.h>
#include "rational-test.h"

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

// Define the various ways to declare rational numbers
Rational::Rational (void)
{ /* construct/initialize the fraction 0/1 */
  numerator = 0;
  denominator = 1;
}

Rational::Rational (int num)
{ /* construct/initialize the fraction num/1 */
  numerator = num;
  denominator = 1;
}

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

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

