目录
完整版代码
主函数
#include<iostream>
#include"RationalNumber.h"
#include"GCDandLCM.h"
using namespace std;
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 << '\n';
c.printRational();
cout << " - ";
d.printRational();
cout << " = ";
x = c - d; // test overloaded operators - and =
x.printRational();
cout << '\n';
c.printRational();
cout << " * ";
d.printRational();
cout << " = ";
x = c * d; // test overloaded operators * and =
x.printRational();
cout << '\n';
c.printRational();
cout << " / ";
d.printRational();
cout << " = ";
x = c / d; // test overloaded operators / and =
x.printRational();
cout << '\n';
c.printRational();
cout << " is:\n";
// test overloaded greater than operator
cout << ((c > d) ? " > " : " <= ");
d.printRational();
cout << " according to the overloaded > operator\n";
// test overloaded less than operator
cout << ((c < d) ? " < " : " >= ");
d.printRational();
cout << " according to the overloaded < operator\n";
// test overloaded greater than or equal to operator
cout << ((c >= d) ? " >= " : " < ");
d.printRational();
cout << " according to the overloaded >= operator\n";
// test overloaded less than or equal to operator
cout << ((c <= d) ? " <= " : " > ");
d.printRational();
cout << " according to the overloaded <= operator\n";
// test overloaded equality operator
cout << ((c == d) ? " == " : " != ");
d.printRational();
cout << " according to the overloaded == operator\n";
// test overloaded inequality operator
cout << ((c != d) ? " != " : " == ");
d.printRational();
cout << " according to the overloaded != operator" << endl;
return 0;
}
RationalNumber.h
#pragma once
#ifndef RATIONALNUMBER_H
#define RATIONALNUMBER_H
class RationalNumber
{
public:
RationalNumber(int = 0, int = 1); // default constructor
RationalNumber operator+(const RationalNumber&); // addition
RationalNumber operator-(const RationalNumber&); // subtraction
RationalNumber operator*(const RationalNumber&); // multiplication
RationalNumber operator/(RationalNumber&); // division
// relational operators
bool operator>(const RationalNumber&) const;
bool operator<(const RationalNumber&) const;
bool operator>=(const RationalNumber&) const;
bool operator<=(const RationalNumber&) const;
// equality operators
bool operator==(const RationalNumber&) const;
bool operator!=(const RationalNumber&) const;
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
#endif
RationalNumber.cpp
#include "RationalNumber.h"
#include<iostream>
#include "GCDandLCM.h"
using namespace std;
RationalNumber::RationalNumber(int x, int y) // default constructor
{
numerator = x;
denominator = y;
reduction();
}
RationalNumber RationalNumber::operator+(const RationalNumber& x) // addition
{
return RationalNumber(numerator * x.denominator + denominator * x.numerator, denominator * x.denominator);
}
RationalNumber RationalNumber::operator-(const RationalNumber& x) // subtraction
{
return RationalNumber(numerator * x.denominator - denominator * x.numerator, denominator * x.denominator);
}
RationalNumber RationalNumber::operator*(const RationalNumber& x) // multiplication
{
return RationalNumber(numerator * x.numerator, denominator * x.denominator);
}
RationalNumber RationalNumber::operator/(RationalNumber& x) // division
{
return RationalNumber(numerator * x.denominator, denominator * x.numerator);
}
// relational operators
bool RationalNumber::operator>(const RationalNumber& x) const
{
int temp1, temp2, Temp;
Temp = lcm(x.denominator, denominator);
temp1 = Temp / denominator;
temp2 = Temp / x.denominator;
int a, b;
a = numerator * temp1;
b = x.numerator * temp2;
if (a > b)
return true;
return false;
}
bool RationalNumber::operator<(const RationalNumber& x) const
{
int temp1, temp2, Temp;
Temp = lcm(x.denominator, denominator);
temp1 = Temp / denominator;
temp2 = Temp / x.denominator;
int a, b;
a = numerator * temp1;
b = x.numerator * temp2;
if (a < b)
return true;
return false;
}
bool RationalNumber::operator>=(const RationalNumber& x) const
{
return !(*this < x);
}
bool RationalNumber::operator<=(const RationalNumber& x) const
{
return !(*this > x);
}
// equality operators
bool RationalNumber::operator==(const RationalNumber& x) const
{
if (numerator == x.numerator && denominator == x.denominator)
return true;
return false;
}
bool RationalNumber::operator!=(const RationalNumber& x) const
{
return !(*this == x);
}
void RationalNumber::printRational() const // display rational number
{
if (numerator == 0)
cout << 0;
else if (denominator == 1)
cout << numerator;
else cout << numerator << "/" << denominator;
}
void RationalNumber::reduction() // function for fraction reduction
{
int largest, gcd = 1;
if (numerator > denominator)
largest = numerator;
else largest = denominator;
for (int loop = largest; loop >= 2; loop--)
if (numerator % loop == 0 && denominator % loop == 0)
{
gcd = loop;
break;
}
numerator /= gcd;
denominator /= gcd;
}
有点小问题,有时间改