ex8-7.cpp - Example 8-7 Overloading the Insertion and Extraction Operators

// File: ex8-7.cpp

#include <iostream>
#include <cmath>
using namespace std;

class fraction
{
  private:
	 int numer;
	 int denom;
  public:
	 fraction() {}
	 fraction(int n, int d) : numer(n), denom(d) {}
	 int get_numer(void) const { return numer; }
	 int get_denom(void) const { return denom; }
	 void reduce(void);
  friend istream& operator>>(istream& s, fraction& f);

};
void fraction::reduce(void)
{
  int min;
// find the minimum of the denom and numer
  min = abs(denom) < abs(numer) ? abs(denom) : abs(numer);
  for (int i = 2; i <= min; i++)
  {
	 while ((abs(numer) % i == 0) && (abs(denom) % i == 0))
	 {
		numer /= i;
		denom /= i;
	 }
  }
  return;
}

ostream& operator<<(ostream& s, fraction f)
{
  f.reduce();
  s << f.get_numer() << '/' << f.get_denom();
  return s;
}

istream& operator>>(istream& s, fraction& f)
{
  s >> f.numer >> f.denom;
  return s;
}

int main (void)
{
  fraction f(3,4);
  cout << f << endl;
  fraction g(2,4);
  cout << g << endl;
  cout << "Enter a fraction: numerator denominator => ";
  fraction h;
  cin >> h;
  cout << h << endl;
  return 0;
}



CIS27: Programming in C++    Instructor: Joe Bentley