C++ Rational Class: Operators & Methods
C++ Rational Class: Operators and Methods
This code defines a C++ class named Rational
to represent and manipulate rational numbers (fractions). It demonstrates key object-oriented programming concepts like operator overloading and friend functions.
Class Definition
#include <iostream>
using namespace std;
class Rational {
private:
int numerator, denominator;
public:
Rational() {
numerator = 0;
denominator = 1; // Default denominator to 1, not 0
}
Rational(int a, int b) {
numerator = a;
denominator = b;
}
Rational(const Rational &ob) {
numerator = ob.numerator;
denominator = ob.denominator;
}
Rational operator+(Rational);
Rational operator-(Rational);
Rational operator*(Rational);
Rational operator/(Rational);
bool operator>(Rational);
bool operator<(Rational);
bool operator==(Rational);
Rational reduction(Rational);
friend istream &operator>>(istream &, Rational &);
friend ostream &operator<<(ostream &, const Rational &);
//Added for correct output
void exchangeSign() {
if (denominator < 0) {
numerator = -numerator;
denominator = -denominator;
}
}
};
Member Functions and Operator Overloading
- Constructors:
- Default constructor: Initializes
numerator
to 0 anddenominator
to 1. - Parameterized constructor: Initializes
numerator
anddenominator
with given values. - Copy constructor: Creates a new
Rational
object as a copy of an existing one.
- Default constructor: Initializes
- Operator Overloading: The class overloads several operators to perform arithmetic and comparison operations on
Rational
objects:+
(addition)-
(subtraction)*
(multiplication)/
(division)>
(greater than)<
(less than)==
(equal to)
- Friend Functions:
operator>>
(input): Overloads the input stream operator to read aRational
object.operator<<
(output): Overloads the output stream operator to print aRational
object.
reduction()
: Reduces the fraction to its simplest form.exchangeSign()
: Correct output.
Implementation Details
Rational Rational::operator+(Rational com) {
this->numerator = this->numerator * com.denominator + this->denominator * com.numerator;
this->denominator = this->denominator * com.denominator;
return reduction(*this);
}
Rational Rational::operator-(Rational com) {
this->numerator = this->numerator * com.denominator - this->denominator * com.numerator;
this->denominator = this->denominator * com.denominator;
return reduction(*this);
}
Rational Rational::operator*(Rational com) {
this->numerator = this->numerator * com.numerator;
this->denominator = this->denominator * com.denominator;
return reduction(*this);
}
Rational Rational::operator/(Rational com) {
this->numerator = this->numerator * com.denominator;
this->denominator = this->denominator * com.numerator;
return reduction(*this);
}
bool Rational::operator>(Rational com) {
return this->numerator * com.denominator > this->denominator * com.numerator;
}
bool Rational::operator<(Rational com) {
return this->numerator * com.denominator < this->denominator * com.numerator;
}
bool Rational::operator==(Rational com) {
return this->numerator * com.denominator == this->denominator * com.numerator;
}
ostream &operator<<(ostream &out, const Rational &com) {
out << com.numerator << "/" << com.denominator;
return out;
}
istream &operator>>(istream &in, Rational &com) {
cout << "Enter the numerator: ";
in >> com.numerator;
cout << "Enter the denominator: ";
in >> com.denominator;
return in;
}
Rational Rational::reduction(Rational com) { // Reduction
int zn = 1;
if (com.numerator < 0)
zn = -1;
for (int i = 2; i <= zn * com.numerator; i++)
if (!(com.numerator % i) && !(com.denominator % i)) {
com.numerator /= i;
com.denominator /= i;
return reduction(com);
}
return com;
}
Main Function
int main() {
// Example Usage (You can add code here to test the Rational class)
return 0;
}
The main function is currently empty. You should add code there to create and use Rational
objects to test the class functionality.