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;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.