编写C++语言程序通过运算符重载,实现分数的有关运算(加减乘除,大小比较,输入输出)

如题所述

#include <iostream>
using namespace std;
class Fraction;
istream& operator>>(istream&,Fraction&);
ostream& operator<<(ostream&,Fraction&);
class Fraction{
int nume;
int deno;
public:
friend istream& operator>>(istream&,Fraction&);
friend ostream& operator<<(ostream&,Fraction&);
void FracSimp()
{
int m,n,r;
m=nume;n=deno;
r=m%n;
while(r)
{
m=n;n=r;
r=m%n;
}
if(n!=1)
{
nume/=n;
deno /=n;
}
}
Fraction():nume(0),deno(1){}
Fraction(int n,int d):nume(n),deno(d){FracSimp();}
void InNume(int n){nume=n;}
void InDeno(int d){deno=d;}
int GetNume(){return nume;}
int GetDeno(){return deno;}
Fraction operator+(Fraction&x)
{
Fraction c;
c.nume=nume*x.deno+x.nume*deno;
c.deno=deno*x.deno ;
return c;
}
bool operator==(Fraction& x)
{
return nume*x.deno==x.nume*deno;
}
Fraction& operator++()
{
nume+=deno;
return *this;
}
Fraction operator++(int)
{
Fraction y;
y=*this;
nume+=deno;
return y;
}
bool operator>(Fraction& x)
{
return nume*x.deno>deno*x.nume;
}
};
istream& operator>>(istream& istr,Fraction& x)
{
char ch;
cout<<"Input a fraction:";
istr>>x.nume>>ch>>x.deno;
if(x.deno ==0)
{
cerr<<"分母不得为零!"<<endl;
exit(1);
}
x.FracSimp ();
return istr;
}
ostream& operator<<(ostream& ostr,Fraction& x)
{
cout<<x.nume<<'/'<<x.deno<<endl;
return ostr;
}
int main(void)
{
Fraction a(5,8),b,c;
cin>>b;
b++;
c=a+b;
cout<<a;
cout<<b;
cout<<c;
cout<<(a>b?1:0)<<endl;
return 0;
}
温馨提示:答案为网友推荐,仅供参考
相似回答