利用运算符重载,实现分数(形式a/b)的输入输出与运算。
//分数类
#include <iostream>
#include <algorithm>
using namespace std;
class Fraction{
public:
Fraction(int denominator,int numerator):denominator(denominator),numerator(numerator){}
friend istream& operator>> (istream &in,Fraction &f);
friend ostream& operator<< (ostream &out,Fraction &f);
Fraction operator+ (const Fraction &f1)const;
Fraction operator- (const Fraction &f1)const;
Fraction operator* (const Fraction &f1)const;
Fraction operator/ (const Fraction &f1)const;
private:
int denominator,numerator;
};
istream& operator>> (istream &in,Fraction &f){
cout<< "[Enter a Fraction]: ";
char c;
while(in>> f.denominator >>c>> f.numerator){
if(f.numerator == 0){//特判分子是否为零
cout<< "Error! The numerator is 0!" <<endl;
cout<< "[Enter a Fraction]: ";
}
else break;
}
return in;
}
ostream& operator<< (ostream &out,Fraction &f){
if(f.denominator == 0)out<< 0 <<endl;
else if(f.numerator == 1)out<< f.denominator <<endl;
else {
if(f.numerator < 0)//将负号提到前面
out<< -f.denominator << "/" << -f.numerator <<endl;
else
out<< f.denominator << "/" << f.numerator <<endl;
}
return out;
}
Fraction Fraction::operator+ (const Fraction &f1)const{
int den = denominator*f1.numerator + numerator*f1.denominator;
int num = numerator*f1.numerator;
int GCD = __gcd(den,num);
return Fraction(den/GCD,num/GCD);//求最大公约数,化简结果
}
Fraction Fraction::operator- (const Fraction &f1)const{
int den = denominator*f1.numerator - numerator*f1.denominator;
int num = numerator*f1.numerator;
int GCD = __gcd(den,num);
return Fraction(den/GCD,num/GCD);
}
Fraction Fraction::operator* (const Fraction &f1)const{
int den = denominator*f1.denominator;
int num = numerator*f1.numerator;
int GCD = __gcd(den,num);
return Fraction(den/GCD,num/GCD);
}
Fraction Fraction::operator/ (const Fraction &f1)const{
int den = denominator*f1.numerator;
int num = numerator*f1.denominator;
int GCD = __gcd(den,num);
return Fraction(den/GCD,num/GCD);
}
int main() {
Fraction f1(1,1),c3(1,1),c4(1,1),c5(1,1),c6(1,1);
cin>>f1;
cout<<"c1="<<f1;
Fraction f2(0,0);
cin>>f2;
cout<<"c2="<<f2;
c3=f1+f2;
cout<<"c3=c1+c2="<<c3;
c4=f1-f2;
cout<<"c4=c1-c2="<<c4;
c5=f1*f2;
cout<<"c5=c1*c2="<<c5;
c6=f1/f2;
cout<<"c6=c1/2="<<c6;
return 0;
}