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 and denominator to 1.
    • Parameterized constructor: Initializes numerator and denominator with given values.
    • Copy constructor: Creates a new Rational object as a copy of an existing one.
  • 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 a Rational object.
    • operator<< (output): Overloads the output stream operator to print a Rational 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.