Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Rewrite this program with the following operators overloaded: >> << + - * / == !

ID: 3716981 • Letter: R

Question

Rewrite this program with the following operators overloaded:

>> << + - * / == !=

#include <iostream>
#include <string>
using namespace std;


class Fraction
{
public:
Fraction(int,int);
void sum(Fraction, Fraction);
void difference(Fraction, Fraction);
void product(Fraction, Fraction);
void quotient(Fraction, Fraction);
void printData(string);
void flip(Fraction);
int getNumerator();
int getDenominator();
private:
int numerator, denominator;
};

Fraction::Fraction(int n=0,int d=1)
{
numerator=n;
denominator=d;

if (denominator==0){
cout<<"Undefined"<<endl;
}
else if (denominator<0){
denominator=1;
}
}

void Fraction::sum(Fraction operand1, Fraction operand2)
{
int n1, d1, n2, d2;
n1 = operand1.getNumerator();
d1 = operand1.getDenominator();
n2 = operand2.getNumerator();
d2 = operand2.getDenominator();

n1 *= d2;
n2 *= d1;
d1 *= d2;
d2 = d1;

n1 += n2;

for(int i = n1; i > 1; i--){
if((n1 % i == 0) && (d1 % i == 0)){
n1 /= i;
d1 /= i;
break;
}
}
numerator = n1;
denominator = d1;
}

void Fraction::difference(Fraction operand1, Fraction operand2)
{
int n1, d1, n2, d2;
n1 = operand1.getNumerator();
d1 = operand1.getDenominator();
n2 = operand2.getNumerator();
d2 = operand2.getDenominator();

n1 *= d2;
n2 *= d1;
d1 *= d2;
d2 = d1;

n1 -= n2;
for(int i = n1; i > 1; i--){
if((n1 % i == 0) && (d1 % i == 0)){
n1 /= i;
d1 /= i;
break;
}
}
numerator = n1;
denominator = d1;
}

void Fraction::product(Fraction operand1, Fraction operand2)
{
int n1, d1, n2, d2;
n1 = operand1.getNumerator();
d1 = operand1.getDenominator();
n2 = operand2.getNumerator();
d2 = operand2.getDenominator();

n1 *= n2;
d1 *= d2;

for(int i = n1; i > 1; i--){
if((n1 % i == 0) && (d1 % i == 0)){
n1 /= i;
d1 /= i;
break;
}
}
numerator = n1;
denominator = d1;
}

void Fraction::quotient(Fraction operand1, Fraction operand2)
{
int n1, d1, n2, d2;
n1 = operand1.getNumerator();
d1 = operand1.getDenominator();
n2 = operand2.getNumerator();
d2 = operand2.getDenominator();

n1 *= d2;
d1 *= n2;

for(int i = n1; i > 1; i--){
if((n1 % i == 0) && (d1 % i == 0)){
n1 /= i;
d1 /= i;
break;
}
}
numerator = n1;
denominator = d1;
}

void Fraction::printData(string msg)
{
cout<< msg << numerator<<"/"<<denominator<<endl;
}

void Fraction::flip(Fraction f)
{
numerator = f.getDenominator();
denominator = f.getNumerator();
}

int Fraction::getNumerator()
{
return numerator;
}

int Fraction::getDenominator()
{
return denominator;
}


int main()
{
Fraction p1(5,6), p2(2,4);
Fraction ans;

p1.printData("The first fraction is: ");
p2.printData("The second fraction is: ");

ans.sum(p1, p2);
ans.printData("The sum is: ");

ans.difference(p1, p2);
ans.printData("The difference is: ");

ans.product(p1, p2);
ans.printData("The product is: ");

ans.quotient(p1, p2);
ans.printData("The quotient is: ");

ans.flip(p1);
ans.printData("The reciprocal of the first fraction is: ");

ans.flip(p2);
ans.printData("The reciprocal of the second fraction is: ");

return 0;
}

Explanation / Answer

#include <iostream>

#include <string>

using namespace std;

class Fraction

{

public:

Fraction(int,int);

Fraction operator +( Fraction operand2);

Fraction& operator=(const Fraction &b);   

Fraction operator -( Fraction operand2);

Fraction operator *( Fraction operand2);

Fraction operator /( Fraction operand2);

//void printData(string);

friend ostream& operator<<(ostream &out, const Fraction &right );

void flip(Fraction);

int getNumerator();

int getDenominator();

private:

int numerator, denominator;

};

Fraction::Fraction(int n=0,int d=1)

{

numerator=n;

denominator=d;

if (denominator==0){

cout<<"Undefined"<<endl;

}

else if (denominator<0){

denominator=1;

}

}

Fraction Fraction::operator +( Fraction operand2)

{

int n1, d1, n2, d2;

n1 = getNumerator(); // first object

d1 = getDenominator(); // // first object

n2 = operand2.getNumerator();

d2 = operand2.getDenominator();

n1 *= d2;

n2 *= d1;

d1 *= d2;

d2 = d1;

n1 += n2;

for(int i = n1; i > 1; i--){

if((n1 % i == 0) && (d1 % i == 0)){

n1 /= i;

d1 /= i;

break;

}

}

// numerator = n1;

//denominator = d1;

return(Fraction(n1,d1));

}

Fraction& Fraction::operator=(const Fraction &b)

{

// Check for self assignment

if(this != &b){   

numerator = b.numerator;

denominator = b.denominator;

}

return *this;   

}

Fraction Fraction::operator-(Fraction operand2)

{

int n1, d1, n2, d2;

n1 = getNumerator(); // firstobject

d1 = getDenominator();// firstobject

n2 = operand2.getNumerator();

d2 = operand2.getDenominator();

n1 *= d2;

n2 *= d1;

d1 *= d2;

d2 = d1;

n1 -= n2;

for(int i = n1; i > 1; i--){

if((n1 % i == 0) && (d1 % i == 0)){

n1 /= i;

d1 /= i;

break;

}

}

//numerator = n1;

// denominator = d1;

return(Fraction(n1,d1));

}

Fraction Fraction::operator *( Fraction operand2)

{

int n1, d1, n2, d2;

n1 = getNumerator(); // first object

d1 = getDenominator();// first object

n2 = operand2.getNumerator();

d2 = operand2.getDenominator();

n1 *= n2;

d1 *= d2;

for(int i = n1; i > 1; i--){

if((n1 % i == 0) && (d1 % i == 0)){

n1 /= i;

d1 /= i;

break;

}

}

//numerator = n1;

// denominator = d1;

return(Fraction(n1,d1));

}

Fraction Fraction::operator /( Fraction operand2)

{

int n1, d1, n2, d2;

n1 = getNumerator();// first object

d1 = getDenominator();// first object

n2 = operand2.getNumerator();

d2 = operand2.getDenominator();

n1 *= d2;

d1 *= n2;

for(int i = n1; i > 1; i--){

if((n1 % i == 0) && (d1 % i == 0)){

n1 /= i;

d1 /= i;

break;

}

}

//numerator = n1;

// denominator = d1;

return(Fraction(n1,d1));

}

ostream& operator<<(ostream &out, const Fraction &right ){

out <<right.numerator <<"/"<<right.denominator <<endl;

return out;

}

void Fraction::flip(Fraction f)

{

numerator = f.getDenominator();

denominator = f.getNumerator();

}

int Fraction::getNumerator()

{

return numerator;

}

int Fraction::getDenominator()

{

return denominator;

}

int main()

{

Fraction p1(5,6), p2(2,4);

Fraction ans;

cout << "The first fraction is: " << p1;

cout << "The second fraction is: " << p2;

ans = p1 + p2;

cout << "The sum is: " << ans;

ans = p1 -p2;

cout << "The difference is: " << ans;

ans = p1 * p2;

cout << "The product is: " << ans;

ans = p1 / p2;

cout << "The quotient is: " << ans;

ans.flip(p1);  

cout << "The reciprocal of the first fraction is: " << ans;

ans.flip(p2);

cout << "The reciprocal of the second fraction is: " << ans;

return 0;

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote