how would i write an operator overloading version for rational number. 1. The te
ID: 3532303 • Letter: H
Question
how would i write an operator overloading version for rational number.
1. The template for class definition will be:
class RationalNumber
{
public:
RationalNumber( int = 0, int = 1 ); // default constructor
/* Write prototype for operator + */
/* Write prototype for operator - */
/* Write prototype for operator * */
/* Write prototype for operator / */
void printRational() const; // display rational number
private:
int numerator; // private variable numerator
int denominator; // private variable denominator
void reduction(); // function for fraction reduction
}; // end class RationalNumber
2. The following is the code for the main function to test the program.
int main()
{
RationalNumber c( 7, 3 ), d( 3, 9 ), x;
c.printRational();
cout << " + ";
d.printRational();
cout << " = ";
x = c + d; // test overloaded operators + and =
x.printRational();
cout << ' ';
c.printRational();
cout << " - ";
d.printRational();
cout << " = ";
x = c - d; // test overloaded operators - and =
x.printRational();
cout << ' ';
c.printRational();
cout << " * ";
d.printRational();
cout << " = ";
x = c * d; // test overloaded operators * and =
x.printRational();
cout << ' ';
c.printRational();
cout << " / ";
d.printRational();
cout << " = ";
x = c / d; // test overloaded operators / and =
x.printRational();
cout << ' ';
c.printRational();
cout << " is: ";
return 0;
} // end main
Explanation / Answer
#include<iostream>
#include<math.h>
using namespace std;
class RationalNumber
{
public:
RationalNumber( int n= 0, int d= 1 )// default constructor
{
numerator=n;
denominator=d;
}
// prototype of overloaded operators
RationalNumber operator+(RationalNumber r);
RationalNumber operator-(RationalNumber r);
RationalNumber operator*(RationalNumber r);
RationalNumber operator/(RationalNumber r);
void printRational()const;// display rational number
private:
int numerator; // private variable numerator
int denominator; // private variable denominator
int gcd(int a, int b);
void reduction();// function for fraction reduction
}; // end class RationalNumber
RationalNumber RationalNumber:: operator+(RationalNumber r)
{RationalNumber temp;
temp.numerator=numerator*r.denominator+r.numerator*denominator;
temp.denominator=denominator*r.denominator;
temp.reduction();
return temp;
}
RationalNumber RationalNumber::operator-(RationalNumber r)
{RationalNumber temp;
temp.numerator=numerator*r.denominator-r.numerator*denominator;
temp.denominator=denominator*r.denominator;
temp.reduction();
return temp;
}
RationalNumber RationalNumber::operator*(RationalNumber r)
{RationalNumber temp;
temp.numerator=numerator*r.numerator;
temp.denominator=denominator*r.denominator;
temp.reduction();
return temp;
}
RationalNumber RationalNumber:: operator/(RationalNumber r)
{ RationalNumber temp;
temp.numerator=numerator*r.denominator;
temp.denominator=denominator*r.numerator;
temp.reduction();
return temp;
}
int RationalNumber::gcd(int a, int b)
{
while( 1 )
{
a = a % b;
if( a == 0 )
return b;
b = b % a;
if( b == 0 )
return a;
}
}
void RationalNumber::reduction()// function for fraction reduction
{
if (numerator != 0)
{
int common = gcd(abs(numerator), denominator);
numerator = numerator / common;
denominator = denominator / common;
}
}
void RationalNumber::printRational()const// display rational number
{
cout<<numerator<<"/"<<denominator;
}
int main()
{
RationalNumber c( 7, 3 ), d( 3, 9 ), x;
c.printRational();
cout << " + ";
d.printRational();
cout << " = ";
x = c + d; // test overloaded operators + and =
x.printRational();
cout << ' ';
c.printRational();
cout << " - ";
d.printRational();
cout << " = ";
x = c - d; // test overloaded operators - and =
x.printRational();
cout << ' ';
c.printRational();
cout << " * ";
d.printRational();
cout << " = ";
x = c * d; // test overloaded operators * and =
x.printRational();
cout << ' ';
c.printRational();
cout << " / ";
d.printRational();
cout << " = ";
x = c / d; // test overloaded operators / and =
x.printRational();
cout << ' ';
c.printRational();
cout << " is: ";
return 0;
} // end main
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.