|
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