Haha, finally I'm right and the compiler's wrong (I hope)! Makes me feel smart I can't upgrade the software on this computer because it belongs to my school, but I'll re-compile it in Dev-C++ when I get home and see if it works. Here's the code, anyways...
Header file:
Code:
/*******************
fraction.h
12/1/05
by Meghan
*******************/
#include<iostream>
using namespace std;
#ifndef FRACTION_H
#define FRACTION_H
class CFract
{
public:
CFract();
CFract(int, int);
const CFract(CFract&);
~CFract(){}
CFract& operator=(CFract&);
CFract operator+(CFract&);
CFract operator-(CFract&);
CFract operator*(CFract&);
CFract operator/(CFract&);
int operator==(CFract);
int operator!=(CFract);
friend istream& operator>>(istream&, CFract&);
friend ostream& operator<<(ostream&, CFract&);
private:
int num;
int denom;
void lowTerms();
int gcd(int larger, int smaller);
};
#endif
Relevant portion of one of the source files:
Code:
/*******************
fraction.cpp
12/1/05
by Meghan
*******************/
#include<iostream>
#include "fraction.h"
using namespace std;
CFract::CFract()
{
num = 0;
denom = 0;
}
CFract::CFract(int pnum, int pdenom)
{
num = pnum;
denom = pdenom;
}
CFract::CFract(CFract& rF)
{
num = rF.num;
denom = rF.denom;
}
CFract& CFract::operator =(CFract& rF)
{
if(&rF != this)
{
num = rF.num;
denom = rF.denom;
}
return (*this);
}
CFract CFract::operator +(CFract& rF)
{
CFract temp;
temp.num = num * rF.denom + denom * rF.num;
temp.denom = denom * rF.denom;
temp.lowTerms();
return temp;
}
CFract CFract::operator -(CFract& rF)
{
CFract temp;
temp.num = num * rF.denom - denom * rF.num;
temp.denom = denom * rF.denom;
temp.lowTerms();
return temp;
}
CFract CFract::operator *(CFract& rF)
{
CFract temp;
temp.num = num * rF.num;
temp.denom = denom*rF.denom;
temp.lowTerms();
return temp;
}
CFract CFract::operator /(CFract& rF)
{
CFract temp;
temp.num = num * rF.denom;
temp.denom = denom * rF.num;
temp.lowTerms();
return temp;
}
ostream& operator<<(ostream& os, CFract& rF)
{
if (rF.denom==1)
os << rF.num;
else
os << rF.num << "/" << rF.denom;
return os;
}
istream& operator>>(istream& is, CFract& rF)
{
char c;
is >> rF.num >> c >> rF.denom;
return is;
}