#ifndef Rational_hpp #define Rational_hpp #include#include #include using namespace::std; class Rational{ public: Rational(); Rational(int numerator,int denominator); int getNumerator()const; int getDemominator()const; Rational add(const Rational& secondRational); Rational sub(const Rational& secondRational); Rational mult(const Rational& secondRational); Rational div(const Rational& secondRational); int compareTo(const Rational& secondRational); bool equal(const Rational& secondRational); int intValue(); double doublevalue(); string toString(); Rational(int numerator); //重载简写运算符 Rational& operator+=(const Rational& secondRational); Rational& operator-=(const Rational& secondRational); Rational& operator*=(const Rational& secondRational); Rational& operator/=(const Rational& secondRational); //重载运算符[] int& operator[](int index); //重载自增自减运算符(前缀) Rational& operator++(); Rational& operator--(); //重载自增自减运算符(后缀) Rational operator++(int dummy); Rational operator--(int dummy); //重载'+','-'运算符(正负) Rational operator+(); Rational operator-(); //重载<<,>>运算符,使用友元类, friend ostream& operator<<(ostream& ,const Rational&); friend istream& operator>>(istream&, Rational&); private: int numerator,denominator; static int gcd(int n,int d); }; //重载非成员函数还例如>,<,<=,>=,==,!=号以及+,-,*,/ Rational operator+(Rational& r1,Rational& r2); Rational operator-(Rational& r1,Rational& r2); Rational operator*(Rational& r1,Rational& r2); Rational operator/(Rational& r1,Rational& r2); #endif
#include "Rational.hpp" #include#include Rational::Rational(){ numerator = 0; denominator = 1; } Rational::Rational(int numerator,int denominator){ int factor = gcd(numerator, denominator); this->numerator = (numerator>0?1:-1) * abs(numerator)/factor; this->denominator = abs(denominator)/factor; } int Rational::gcd(int n, int d){ int a = abs(n); int b = abs(d); int gcd = 1; for (int i=1; i<=a&&i<=b; i++) { if (a%i==0&&b%i==0) { gcd = i; } } return gcd; } Rational::Rational(int numerator){ this->numerator = numerator; this->denominator = 1; } int Rational::getNumerator()const{ return numerator; } int Rational::getDemominator()const{ return denominator; } Rational Rational::add(const Rational &secondRational){ int n; int d; n = numerator*secondRational.getDemominator()+denominator*secondRational.getNumerator(); d=denominator*secondRational.getDemominator(); return Rational(n,d); } Rational Rational::sub(const Rational &secondRational){ int n; int d; n = numerator*secondRational.getDemominator()-denominator*secondRational.getNumerator(); d=denominator*secondRational.getDemominator(); return Rational(n,d); } Rational Rational::mult(const Rational &secondRational){ int n,d; n = numerator*secondRational.getNumerator(); d = denominator*secondRational.getDemominator(); return Rational(n,d); } Rational Rational::div(const Rational &secondRational){ int n,d; n = numerator*secondRational.getDemominator(); d = denominator*secondRational.getNumerator(); return Rational(n,d); } int Rational::compareTo(const Rational &secondRational){ Rational temp =sub(secondRational); if (temp.getNumerator()<0) { return -1; } else if (temp.getNumerator()==0) return 0; else return 1; } bool Rational::equal(const Rational &secondRational){ if (compareTo(secondRational)==0) { return true; } else return false; } int Rational::intValue(){ return getNumerator()/getDemominator(); } double Rational::doublevalue(){ return 1.0*getNumerator()/getDemominator(); } string Rational::toString(){ stringstream ss; ss< 1) { ss<<"/"< >(istream& in,Rational& firstRational){ cout<<"请输入分子:"; in>>firstRational.numerator; cout<<"请输入分母"; in>>firstRational.denominator; return in; } Rational operator+(Rational& r1,Rational& r2){ return r1.add(r2); } Rational operator-(Rational& r1,Rational& r2){ return r1.sub(r2); } Rational operator*(Rational& r1,Rational& r2){ return r1.mult(r2); } Rational operator/(Rational& r1,Rational& r2){ return r1.div(r2); }
测试
#include#include "Rational.hpp" using namespace::std; int main(int argc, const char * argv[]) { Rational a(3,4); Rational b(5,2); Rational c(1,2); cout<>d; cout< 结果



