The program is designed to get add,subtract,multiply (fractions)...
and does anyone know how to get division?
#include "stdafx.h"
#ifndef FRACTION_H__
#define FRACTION_H__
#include <iostream>
#include <assert.h>
using namespace std;
class Fraction {
public:
Fraction(); //default constructor
Fraction(int num, int denom); // explicit value constructor
Fraction(Fraction& f); // copy constructor
~Fraction(); // destructor
// overloaded operators
friend bool operator == (const Fraction & f1, const Fraction & f2);
Fraction operator+(const Fraction &f1) const;
Fraction operator-(const Fraction &f1) const;
Fraction operator*(const Fraction &f1) const;
const Fraction& operator=(const Fraction &f);
bool operator == ( Fraction & f2);
// friend functions
friend std::istream& operator>> (std::istream& in, Fraction & f);
friend std::ostream& operator<< (std::ostream& out, const Fraction& f);
private:
int num; // better design is make these private
int denom; // and provide accessor and mutator methods
public:
int GetNum() { return num; }
int GetDenom() { return denom; }
void SetNum( int nNum ) { num = nNum; }
void SetDenom( int nDenom ) { denom = nDenom; }
};
#endif // FRACTION_H__
Fraction::Fraction(): num(1), denom(1) {}
// explicit value constructor
Fraction::Fraction(int numIn, int denomIn) {
num = numIn;
denom = denomIn;
}
// copy constructor
Fraction::Fraction(Fraction& f) { [b]/////////note: candidates are: Fraction::Fraction(Fraction&)[/b] num = f.GetNum();
denom = f.GetDenom();
}
Fraction Fraction::operator+(const Fraction &f) const {
Fraction result;
result.num = num * f.denom + denom * f.num;
result.denom = denom * f.denom;
return result;
}
Fraction Fraction::operator-(const Fraction &f) const {
Fraction result;
result.num = num * f.denom - denom * f.num;
result.denom = denom * f.denom;
return result;
}
Fraction Fraction::operator*(const Fraction &f) const {
Fraction result;
result.num = num * f.num;
result.denom = denom * f.denom;
return result;
}
bool Fraction::operator == ( Fraction & f2) {
// return (f1.num == f2.num &&
// f1.denom == f2.denom);
return (this->GetNum() * f2.GetDenom() == f2.GetNum() * this->GetDenom() );
}
// in.good() specifies that the input was successfull
// the right type was received
istream& operator >> (istream & in, Fraction & f) {
int numIn, denomIn;
cout << "Enter the numerator: ";
in >> numIn;
assert(in.good());
f.SetNum( numIn );
cout << "Enter the denominator: ";
in >> denomIn;
assert(in.good());
cout << "denomIn is: " << denomIn << endl;
f.SetDenom( denomIn );
return in;
}
ostream& operator << (ostream& out, Fraction& f) {
out << "Fraction is: " << f.GetNum() << '/' << f.GetDenom() << endl;
return out;
}
// If f1, f2, f3 are of type Fraction, then
// it is possible to write code in this form: f1 = f2 = f3;
// because the return from this method is of type Fraction.
// Also, note the use of "*this". This is the way
// to return an instance of the current object as a return value
const Fraction& Fraction::operator=(const Fraction& f) {
if (this != &f) {
num = f. num;
denom = f.denom;
}
return *this;
}
Fraction::~Fraction() {
}
#define CAPACITY 10
int main ( ) {
int nNum;
int nDenom;
//int CAPACITY = 10;
char string[CAPACITY];
Fraction f1;
Fraction f2;
cout<<"Test Your Math \n" << endl;
cout<<"Enter one operation of add, subtract, multiply, equal, quit \n" <<endl;
cout<<"COMMAND>" <<endl;
cin>>string;
cin>>nNum;
cin>>nDenom;
f1.SetNum( nNum );
f1.SetDenom( nDenom );
cout<<f1.GetNum() << endl << f1.GetDenom() << endl;
cin>>nNum;
cin>>nDenom;
f2.SetNum( nNum );
f2.SetDenom( nDenom );
cout<<f2.GetNum() << endl << f2.GetDenom() << endl;
switch(strlen(string))
{
case 3:
{
Fraction f3=f1+f2; [b]/////// error: no matching function for call to ?raction::Fraction(Fraction)[/b]
cout<<"The sum of Fraction1 & Fraction2 is"<< f3.GetNum() << endl << f3.GetDenom() <<endl;
break;
}
case 4:
break;
case 5:
{
int f3 = (f1==f2);
if(f3 == 1)
cout<<"The Fraction1 & Fraction2 is same"<<endl;
else if(f3 == 0)
cout<<"The Fraction1 & Fraction2 is same"<<endl;
break;
}
case 8:
if( string[0] = 109){
Fraction f3=f1*f2; [b]/////// error: no matching function for call to ?raction::Fraction(Fraction)[/b]
cout<<"The multiply of Fraction1 & Fraction2 is"<<f3.GetNum() << endl << f3.GetDenom() <<endl;
}
else{
Fraction f3=f1-f2; [b]/////// error: no matching function for call to ?raction::Fraction(Fraction)[/b]
cout<<"The subtract of Fraction1 & Fraction2 is"<<f3.GetNum() << endl << f3.GetDenom() <<endl;
}
break;
}
return 0;
}

New Topic/Question
Reply
MultiQuote










|