I am having a difficult time figuring out how to overload the addition '+' operator to add two fractions from my Fraction Class.
I've searched this site and pored over several books only to find nothing pertaining to my delimma.
Obviously, this is a school assignment and this is for class credit. I would like to further UNDERSTAND the concept of operator overloading and am not asking for someone to write this for me, however, I would greatly appreciate ANY and ALL suggestions concerning this.
Code:
#include <iostream>
#include <iomanip>
using namespace std;
#include <stdlib.h>
class Fraction
{
private:
int WholeNumber;
int Numerator;
int Denominator;
public:
Fraction()
{
WholeNumber = 0;
Numerator = 0;
Denominator = 1;
}
Fraction(int w, int n, int d):
WholeNumber(w), Numerator(n), Denominator(d)
{}
Fraction(const Fraction & rhs)
{
WholeNumber = rhs.getWholeNumber();
Numerator = rhs.getNumerator();
Denominator = rhs.getDenominator();
}
int getWholeNumber(void) const { return WholeNumber; } //provide definition here...
int getNumerator(void) const { return Numerator; }
int getDenominator(void) const { return Denominator; }
void getFraction(void) const
{
cout << WholeNumber;
if(Numerator)
cout << " " << Numerator
<< "/"
<< Denominator;
}
void setFraction(int w, int n, int d)
{
int fract = (w * n + d)/ d; //WholeNumber * Denominator + Numerator
}
void setFraction(void)
{
char Temp[] = " ";
char *pChr;
char w[8], n[8], d[8];
for(int count = 0; count < 7; count++)
{
w[count] = ' ';
n[count] = ' ';
d[count] = ' ';
}
d[count] = '\0';
n[count] = '\0';
w[count] = '\0';
pChr = &Temp[15];
cin.getline(Temp,15);
while(*pChr == ' ')
{
pChr--;
}
*pChr = '\0';
int NullLocation = (pChr - Temp);
pChr--;
char *pDen = &d[6];
char *pNum = &n[6];
char *pWhole = &w[6];
for(count = 0; count < NullLocation; count++)
{
if(Temp[count] == '/')
break;
}
if(count >= NullLocation)
{
Denominator = 1;
Numerator = 0;
}
else
{
while(*pChr != '/')
{
*pDen = *pChr;
pDen--;
pChr--;
}
Denominator = atoi(d);
pChr--;
while(*pChr != ' ')
{
*pNum = *pChr;
pNum--;
pChr--;
}
Numerator = atoi(n);
}//End else
while(pChr >= &Temp[0])
{
*pWhole = *pChr;
pWhole--;
pChr--;
}
WholeNumber = atoi(w);
}
void AddFractions(Fraction, Fraction);
void ReduceFractions(void);
Fraction Fraction::operator + (Fraction & rhs);
};
void Fraction::AddFractions(Fraction One, Fraction Two)
{
int New1;
int New2;
int NewNumerator,
CarryOut;
WholeNumber = One.WholeNumber + Two.WholeNumber;
Denominator = One.Denominator + Two.Denominator;
New1 = One.Numerator * Two.Denominator;
New2 = Two.Numerator * One.Denominator;
NewNumerator = New1 + New2;
CarryOut = NewNumerator / Denominator;
WholeNumber += CarryOut;
Numerator = NewNumerator % Denominator;
}
void Fraction::ReduceFractions(void)
{
int First = Numerator;
int Second = Denominator;
int Temp;
if(Numerator ==0)
{
Denominator = 1;
return;
}
while(First != Second)
{
if(First < Second)
{
Temp = First;
First = Second;
Second = Temp;
}
First -= Second;
}
Numerator /= First;
Denominator /= First;
}
int main(void)
{
Fraction FirstOne;
Fraction SecondOne;
Fraction Sum;
cout << "Enter the first fraction value: " << endl;
FirstOne.setFraction();
cout << "Enter the second fraction value: " << endl;
SecondOne.getFraction();
Sum.AddFractions(FirstOne, SecondOne);
Sum.ReduceFractions();
cout << endl << "The sum of ";
FirstOne.getFraction();
cout << " and ";
SecondOne.getFraction();
cout << " is ";
Sum.getFraction();
cout << endl << endl;
Fraction NewSum = FirstOne + SecondOne;
cout << endl << "The sum of ";
FirstOne.getFraction();
cout << " and ";
SecondOne.getFraction();
cout << " is ";
Sum.getFraction();
cout << endl << endl;
return 0;
}
Fraction::operator +(Fraction &fract)
{
Fraction temp;
temp = Fraction(WholeNumber * Denominator + Numerator) + (fract.getWholeNumber() * fract.getDenominator() + fract.getNumerator();
return Fraction::setFraction(temp);
}
I've got everything else in place (or so I believe). This is ticking me off, considering that the next thing I have to do is overload many more operators. Thank you.