这是一篇关于如何重载分子分母加减乘除的文章
懒得把函数定义在类外面
涉及到的__gcd(int a,int b)函数是用来求两个数的最大公约数
# include <iostream>
# include <algorithm>
using namespace std;
class Fraction
{
private :
int numerator;
int denominator;
public :
Fraction ( ) { this -> numerator= 0 ; this -> denominator= 1 ; }
Fraction ( int num, int den) : numerator ( num) , denominator ( den) { }
Fraction ( const Fraction & f)
{
this -> numerator= f. numerator;
this -> denominator= f. denominator;
}
friend ostream& operator << ( ostream & o, const Fraction & f)
{
if ( f. denominator== f. numerator)
{
o<< 1 ;
return o;
}
o<< f. numerator<< "/" << f. denominator;
return o;
}
friend istream & operator >> ( istream & i, Fraction & f)
{
i >> f. numerator>> f. denominator;
return i;
}
friend Fraction operator + ( const Fraction & f1, const Fraction & f2)
{
static Fraction temp;
temp. numerator= f1. denominator* f2. numerator+ f1. numerator* f2. denominator;
temp. denominator= f1. denominator* f2. denominator;
int t= __gcd ( temp. numerator, temp. denominator) ;
temp. numerator/= t;
temp. denominator/= t;
return temp;
}
friend Fraction operator - ( const Fraction & f1, const Fraction & f2)
{
static Fraction temp;
temp. numerator= f1. numerator* f2. denominator- f1. denominator* f2. numerator;
temp. denominator= f1. denominator* f2. denominator;
int t= __gcd ( temp. numerator, temp. denominator) ;
temp. numerator/= t;
temp. denominator/= t;
return temp;
}
friend Fraction operator * ( const Fraction & f1, const Fraction & f2)
{
static Fraction temp;
temp. numerator= f1. numerator* f2. numerator;
temp. denominator= f1. denominator* f2. denominator;
int t= __gcd ( temp. numerator, temp. denominator) ;
temp. numerator/= t;
temp. denominator/= t;
return temp;
}
friend Fraction operator / ( const Fraction & f1, const Fraction & f2)
{
static Fraction temp;
temp. numerator= f1. numerator* f2. denominator;
temp. denominator= f1. denominator* f2. numerator;
int t= __gcd ( temp. numerator, temp. denominator) ;
temp. numerator/= t;
temp. denominator/= t;
return temp;
}
friend bool operator != ( const Fraction & f1, const Fraction & f2 )
{
return f1. numerator* f2. denominator- f1. denominator* f2. numerator!= 0 ? true : false ;
}
friend bool operator > ( const Fraction & f1, const Fraction & f2 )
{
return f1. numerator* f2. denominator- f1. denominator* f2. numerator> 0 ? true : false ;
}
friend bool operator < ( const Fraction & f1, const Fraction & f2 )
{
return ( ( f1. numerator* f2. denominator- f1. denominator* f2. numerator< 0 ) ? true : false ) ;
}
friend bool operator == ( const Fraction & f1, const Fraction & f2 )
{
return f1. numerator* f2. denominator- f1. denominator* f2. numerator== 0 ? true : false ;
}
friend bool operator >= ( const Fraction & f1, const Fraction & f2 )
{
return f1. numerator* f2. denominator- f1. denominator* f2. numerator>= 0 ? true : false ;
}
friend bool operator <= ( const Fraction & f1, const Fraction & f2 )
{
return f1. numerator* f2. denominator- f1. denominator* f2. numerator<= 0 ? true : false ;
}
} ;
int main ( )
{
Fraction a, b;
cin>> a>> b;
cout<< a<< endl<< b<< endl;
Fraction c= a+ b;
cout<< c<< endl;
cout<< a* b<< endl;
if ( a< b)
{
cout<< a<< "小于" << b;
}
return 0 ;
}