#include<iostream.h>
class CRational
{
public:
CRational();
CRational(int n);
CRational(int n,int m);
~CRational();
void simply();
void display();
CRational& operator =(const CRational &c);
friend istream& operator >>(istream &is,CRational &c);
friend ostream& operator <<(ostream &os,CRational &c);
friend bool operator ==(const CRational &c1,const CRational &c2);
friend CRational operator +(const CRational &c1,const CRational &c2);
friend CRational operator -(const CRational &c1,const CRational &c2);
friend CRational operator *(const CRational &c1,const CRational &c2);
friend CRational operator /(const CRational &c1,const CRational &c2);
private:
int num,den;
};
//构造函数
CRational::CRational()
{
num=0;
den=1;
}
CRational::CRational(int n)
{
num=n;
den=1;
}
CRational::CRational(int n,int m)
{
num=n;
den=m;
}
//析构函数
CRational::~CRational()
{
}
//约分函数
void CRational::simply()
{
int i,min;
if(num<den)
min=num;
else
min=den;
for(i=2;i<min;i++)
{
while(num%i==0&&den%i==0)
{
num/=i;
den/=i;
min/=i;
}
}
}
//输出函数
void CRational::display()
{
simply();
if(num==0)
cout<<0<<endl;
else if(num==den)
cout<<1<<endl;
else if(num%den==0)
cout<<num/den<<endl;
else
cout<<num<<"/"<<den<<endl;
}
//重载>>和<<
istream& operator >>(istream &is,CRational &c)
{
cout<<"请输入分子:";
is>>c.num;
cout<<"请输入分母:";
is>>c.den;
return is;
}
ostream& operator <<(ostream &os,CRational &c)
{
c.simply();
if(c.num==0)
os<<0<<endl;
else if(c.num==c.den)
os<<1<<endl;
else if(c.num%c.den==0)
os<<c.num/c.den<<endl;
else
os<<c.num<<"/"<<c.den<<endl;
return os;
}
//重载=
CRational& CRational::operator =(const CRational &c)
{
num=c.num;
den=c.den;
return *this;
}
//重载==
bool operator ==(const CRational &c1,const CRational &c2)
{
if(c1.num==c2.num&&c1.den==c2.den)
return true;
else
return false;
}
//重载四则运算
CRational operator +(const CRational &c1,const CRational &c2)
{
CRational c;
c.num=c1.num*c2.den+c2.num*c1.den;
c.den=c1.den*c2.den;
return c;
}
CRational operator -(const CRational &c1,const CRational &c2)
{
CRational c;
c.num=c1.num*c2.den-c2.num*c1.den;
c.den=c1.den*c2.den;
return c;
}
CRational operator *(const CRational &c1,const CRational &c2)
{
CRational c;
c.num=c1.num*c2.num;
c.den=c1.den*c2.den;
return c;
}
CRational operator /(const CRational &c1,const CRational &c2)
{
CRational c;
c.num=c1.num*c2.den;
c.den=c1.den*c2.num;
return c;
}
int main()
{
CRational c1,c2,c3;
cin>>c1;
cin>>c2;
cout<<endl;
cout<<"两分数相加";
c3=c1+c2;
cout<<c3<<endl;
cout<<"两分数相减";
c3=c1-c2;
cout<<c3<<endl;
cout<<"两分数相乘";
c3=c1*c2;
cout<<c3<<endl;
cout<<"两分数相除";
c3=c1/c2;
cout<<c3<<endl;
return 0;
}