#include <iostream>
using namespace std;
class CFraction
{
public:
CFraction(int nu=0,int de=1);
void input(); //按照"nu/de"的格式,如"5/2"的形式输入
void output(); //输出
int gys(int nu,int de); //找寻最大公约数
int fabs(int x); //取正
void simplify(); //分数化简
bool operator>(CFraction &c);
bool operator<(CFraction &c);
bool operator>=(CFraction &c);
bool operator<=(CFraction &c);
bool operator==(CFraction &c);
bool operator!=(CFraction &c);
CFraction operator+(CFraction &c);
CFraction operator-(CFraction &c);
CFraction operator*(CFraction &c);
CFraction operator/(CFraction &c);
private:
int nume; // 分子
int deno; // 分母
};
CFraction::CFraction(int nu,int de)
{
if (de!=0) //没考虑到分母不为0
{
nume=nu;
deno=de;
}
else
{
cerr<<"初始化中发生错误,程序退出\n";
exit(0);
}
}
void CFraction::input()
{
char a;
cout<<"请输入分子/分母:";
while(1)
{
cin>>nume>>a>>deno;
if(a!='/')
cout<<"格式不正确,请重新输入"<<endl;
else if (deno==0) //这步写漏了
cout<<"分母不能为零!\n ";
else
break;
}
}
void CFraction::output()
{
cout<<nume<<"/"<<deno<<endl;
}
int CFraction::gys(int nu,int de)
{
int k,i;
k=nu<de?nu:de;
for(i=k;i>0;i--)
{
if(nu%i==0&&de%i==0)
break;
}
return i;
}
int CFraction::fabs(int x)
{
if(x>=0) return x;
return -x;
}
void CFraction::simplify()
{
if(nume!=0)
{
int m,n;
m=fabs(deno);
n=fabs(nume);
int i=gys(m,n);
deno/=i;
nume/=i;
}
if(deno<0)// 将分母转化为正数
{
deno=-deno;
nume=-nume;
}
}
//比较运算符重载
bool CFraction::operator>(CFraction &c)
{
int i=deno*c.deno;
int n1=nume*i/deno;
int n2=c.nume*i/c.deno;
if(n1>n2) return true;
return false;
}
bool CFraction::operator<(CFraction &c)
{
int i=deno*c.deno;
int n1=nume*i/deno;
int n2=c.nume*i/c.deno;
if(n1<n2) return true;
return false;
}
bool CFraction::operator>=(CFraction &c)
{
if(*this<c) return false;
return true;
}
bool CFraction::operator<=(CFraction &c)
{
if(*this>c) return false;
return true;
}
bool CFraction::operator==(CFraction &c)
{
if(*this>c||*this<c) return false;
return true;
}
bool CFraction::operator!=(CFraction &c)
{
if(*this==c) return false;
return true;
}
//加减乘除运算符重载
CFraction CFraction::operator+(CFraction &c)
{
int i=deno*c.deno;
int n=nume*i/deno+c.nume*i/c.deno;
CFraction a(n,i);
a.simplify();
return a;
}
CFraction CFraction::operator-(CFraction &c)
{
int i=deno*c.deno;
int n=nume*i/deno-c.nume*i/c.deno;
CFraction a(n,i);
a.simplify();
return a;
}
CFraction CFraction::operator*(CFraction &c)
{
int n=nume*c.nume;
int d=deno*c.deno;
CFraction a(n,d);
a.simplify();
return a;
}
CFraction CFraction::operator/(CFraction &c)
{
int n=nume*c.deno;
int d=deno*c.nume;
CFraction a(n,d);
a.simplify();
return a;
}
int main()
{
CFraction a,b,c;
a.input();
b.input();
cout<<"a>b"<<(a>b?"是":"不是")<<"正确"<<endl;
cout<<"a<b"<<(a<b?"是":"不是")<<"正确"<<endl;
cout<<"a>=b"<<(a>=b?"是":"不是")<<"正确"<<endl;
cout<<"a<=b"<<(a<=b?"是":"不是")<<"正确"<<endl;
cout<<"a==b"<<(a==b?"是":"不是")<<"正确"<<endl;
cout<<"a!=b"<<(a!=b?"是":"不是")<<"正确"<<endl;
c=a+b;
cout<<"a+b=";
c.output();
c=a-b;
cout<<"a-b=";
c.output();
c=a*b;
cout<<"a*b=";
c.output();
c=a/b;
cout<<"a/b=";
c.output();
return 0;
}
运行结果: