Fraction2.cpp
Fraction2.h
MixedNumber2.cpp
MixedNumber2.h
Main.cpp
Fraction2.cpp
#include "Fraction2.h"
#include <iostream>
using namespace std;
Fraction::Fraction()
{
numerator=1;
denominator=2;
}
Fraction::Fraction(int n, int d)
{
setNumerator(n);
setDenominator(d);
}
void Fraction::setNumerator(int input)
{
numerator=input;
}
void Fraction::setDenominator(int input)
{
if(input==0)
cout<<"You cannot have zero in the denominator.";
denominator=input;
}
int Fraction::getNumerator()
{
return numerator;
}
int Fraction::getDenominator()
{
return denominator;
}
void Fraction::displayFraction()
{
cout<<numerator<<"/"<<denominator<<"\n";
}
Fraction Fraction::operator*(Fraction f)
{
Fraction answerFraction;
answerFraction.setNumerator(f.numerator*numerator);
answerFraction.setDenominator(f.denominator*denominator);
return answerFraction;
}
Fraction Fraction::operator/(Fraction f)
{
Fraction answerFraction;
answerFraction.setNumerator(f.denominator*numerator);
answerFraction.setDenominator(f.numerator*denominator);
return answerFraction;
}
Fraction Fraction::operator+(Fraction f)
{
Fraction answerFraction;
answerFraction.setNumerator(f.denominator*numerator + f.numerator*denominator);
answerFraction.setDenominator(f.denominator*denominator);
return answerFraction;
}
Fraction Fraction::operator-(Fraction f)
{
Fraction answerFraction;
answerFraction.setNumerator(f.denominator*numerator - f.numerator*denominator);
answerFraction.setDenominator(f.denominator*denominator);
return answerFraction;
}
ostream &operator<<(ostream & cout, const Fraction &f)
{
if(f.denominator == 1 || f.numerator == 0)
cout<<f.numerator;
else
cout<<f.numerator<<"/"<<f.denominator<<"\n";
return cout;
}
istream &operator>>(istream & cin, Fraction &f)
{
cin>>f.numerator;
cin.ignore();
cin>>f.denominator;
return cin;
}
void Fraction::print() const
{
cout<<"The fraction "<<(*this)<<" is ";
if(numerator<denominator)
cout<<"proper.\n";
else
cout<<"improper.\n";
}
Fraction2.h
#ifndef FRACTION_H
#define FRACTION_H
#include <iostream>
using namespace std;
class Fraction
{
friend ostream &operator<<(ostream &, const Fraction &);
friend istream &operator>>(istream &, Fraction &);
public:
Fraction();
Fraction(int, int);
void setNumerator(int );
void setDenominator(int );
int getNumerator();
int getDenominator();
void displayFraction();
Fraction operator*(Fraction );
Fraction operator/(Fraction );
Fraction operator+(Fraction );
Fraction operator-(Fraction );
virtual void print() const;
private:
int numerator;
int denominator;
};
#endif
MixedNumber2.cpp
#include "MixedNumber2.h"
#include "Fraction2.h"
#include <iostream>
using namespace std;
MixedNumber::MixedNumber(int w, int n, int d)
:Fraction( n, d)
{
setWhole(w);
}
MixedNumber::MixedNumber():Fraction()
{
whole=0;
}
void MixedNumber::setWhole(int w)
{
whole=w;
}
int MixedNumber::getWhole()
{
return whole;
}
void MixedNumber::displayMixedNumber()
{
cout<<whole<<" ";
displayFraction();
}
MixedNumber MixedNumber::operator*(MixedNumber &m)
{
Fraction f1, f2, f3;
MixedNumber m1;
f1=mixedNumberToImproperFraction();
f2=m.mixedNumberToImproperFraction();
f3=f1*f2;
m1.fractionToMixedNumber(f3);
return m1;
}
MixedNumber MixedNumber::operator/(MixedNumber & m)
{
Fraction f1, f2, f3;
MixedNumber m1;
f1=mixedNumberToImproperFraction();
f2=m.mixedNumberToImproperFraction();
f3=f1/f2;
m1.fractionToMixedNumber(f3);
return m1;
}
MixedNumber MixedNumber::operator+(MixedNumber &m)
{
Fraction f1, f2, f3;
MixedNumber m1;
f1=mixedNumberToImproperFraction();
f2=m.mixedNumberToImproperFraction();
f3=f1+f2;
m1.fractionToMixedNumber(f3);
return m1;
}
MixedNumber MixedNumber::operator-(MixedNumber &m)
{
Fraction f1, f2, f3;
MixedNumber m1;
f1=mixedNumberToImproperFraction();
f2=m.mixedNumberToImproperFraction();
f3=f1-f2;
m1.fractionToMixedNumber(f3);
return m1;
}
Fraction MixedNumber::mixedNumberToImproperFraction()
{
int n;
n = whole*getDenominator()+getNumerator();
Fraction f(n,getDenominator());
return f;
}
void MixedNumber::fractionToMixedNumber(Fraction &f)
{
whole=f.getNumerator()/f.getDenominator();
setNumerator(abs(f.getNumerator()%f.getDenominator()));
setDenominator(f.getDenominator());
}
void MixedNumber::print() const
{
cout<<"The mixed number "<<(*this)<<" is ";
if(whole==0)
cout<<"a fraction and not a mixed number.\n";
else
cout<<"indeed a mixed number.\n";
}
void MixedNumber::printMixedNumber()
{
cout<<whole<<" "<<getNumerator()<<"/"<<getDenominator();
}
ostream &operator<<(ostream &cout, const MixedNumber &m)
{
Fraction f=m;
if(m.whole==0)
cout<<f;
else
{
cout<<m.whole<<" ";
if(f.getNumerator()!=0)
cout<<f;
}
return cout;
}
istream &operator>>(istream &cin, MixedNumber &m)
{
int n, d;
cin>>m.whole;
cin.ignore();
cin>>n;
cin.ignore();
cin>>d;
m.setNumerator(n);
m.setDenominator(d);
return cin;
}
MixedNumber2.h
#ifndef MIXEDNUMBER_H
#define MIXEDNUMBER_H
#include "Fraction2.h"
#include <iostream>
using namespace std;
class MixedNumber : public Fraction
{
friend ostream &operator<<(ostream &, const MixedNumber &);
friend istream &operator>>(istream &, MixedNumber &);
public:
MixedNumber();
MixedNumber(int, int, int);
void setWhole(int );
int getWhole();
void displayMixedNumber();
MixedNumber operator*(MixedNumber & );
MixedNumber operator/(MixedNumber & );
MixedNumber operator+(MixedNumber & );
MixedNumber operator-(MixedNumber & );
Fraction mixedNumberToImproperFraction();
void fractionToMixedNumber(Fraction &);
virtual void print() const;
void printMixedNumber();
private:
int whole;
};
#endif
Main.cpp
#include "Fraction2.h"
#include "MixedNumber2.h"
#include <iostream>
using namespace std;
int main()
{
Fraction fractionProper(5, 7), fractionImproper(7,5);
MixedNumber mixed(2, 4, 7), unmixed(0, 4, 9);
cout<<"Print fraction "<<fractionProper<<"\n";
fractionProper.print();
cout<<"Print fraction "<<fractionImproper<<"\n";
fractionImproper.print();
cout<<"Print mixed number "<<mixed<<"\n";
mixed.print();
cout<<"Print mixed number "<<unmixed<<"\n";
unmixed.print();
Fraction *fractionPointer;
MixedNumber *mixedNumberPointer;
fractionPointer = &fractionProper;
mixedNumberPointer=&mixed;
cout<<"***********************************************************\n";
cout<<"We store a Fraction object's address in a Fraction pointer\n";
cout<<"and a MixedNumber object's address in a MixedNumber pointer\n";
cout<<"fractionPointer->print();\n";
fractionPointer->print();
cout<<"mixedNumberPointer->print();\n";
mixedNumberPointer->print();
cout<<"Everything comes out as expected.\n";
cout<<"***********************************************************\n";
fractionPointer = &mixed;
cout<<"We now store a MixedNumber object's address in a Fraction pointer.\n";
cout<<"We cannot store a MixedNumber object's address in a Fraction pointer\n";
cout<<"fractionPointer->print();\n";
fractionPointer->print();
cout<<"The MixedNumber stored in the Fraction pointer behaves like a MixedNumber object!\n";
cout<<"***********************************************************\n";
system("pause");
return 0;
}