#include<iostream>
using namespace std;
#include<cmath>
class CFraction
{
private:
int nume;//分子
int deno;//分母
public:
CFraction(int nu=0,int de=1):nume(nu),deno(de) {}
void simplify();
//以下为运算符重载部分
CFraction operator+(const CFraction &temp);
CFraction operator-(const CFraction &temp);
CFraction operator*(const CFraction &temp);
CFraction operator/(const CFraction &temp);
friend istream &operator>>(istream &in,CFraction &x);
friend ostream &operator<<(ostream &out,CFraction x);
};
void CFraction::simplify()//化简
{
int d,n,t;
n=fabs(nume);
d=fabs(deno);
while(t=n%d)
{
n=d;
d=t;
}
deno/=t;
nume/=t;
if(deno==0)
exit(1);
else if(deno<0)
{
deno=-deno;
nume=-nume;
}
}
// 以下为重载输出运算符部分
istream &operator>>(istream &in,CFraction &x)
{
char ch;
while(1)
{
cin>>x.nume>>ch>>x.deno;
if (x.deno==0)
cerr<<"分母为0, 请重新输入\n";
else if(ch!='/')
cerr<<"格式错误(形如m/n)! 请重新输入\n";
else
break;
}
return cin;
}
ostream &operator<<(ostream &out,CFraction x)
{
cout<<x.nume<<'/'<<x.deno;
return cout;
}
CFraction CFraction::operator +(const CFraction &temp)
{
CFraction t;
t.deno=temp.deno*deno;
t.nume=nume*temp.deno+temp.nume*deno;
t.simplify();
return t;
}
CFraction CFraction::operator -(const CFraction &temp)
{
CFraction t;
t.deno=temp.deno*deno;
t.nume=nume*temp.deno-temp.nume*deno;
t.simplify();
return t;
}
CFraction CFraction::operator *(const CFraction &temp)
{
CFraction t;
t.deno=temp.deno*deno;
t.nume=temp.nume*nume;
t.simplify();
return t;
}
CFraction CFraction::operator /(const CFraction &temp)
{
CFraction t;
t.deno=deno*temp.nume;
t.nume=nume*temp.deno;
t.simplify();
return t;
}
int main()
{
CFraction x,y,s;
cout<<"输入x: ";
cin>>x;
cout<<"输入y: ";
cin>>y;
s=x+y;
cout<<"+x+y="<<s<<endl;
s=x-y;
cout<<"x-y="<<s<<endl;
s=x*y;
cout<<"x*y="<<s<<endl;
s=x/y;
return 0;
}
运算符重载——分数加减
最新推荐文章于 2022-04-07 16:43:56 发布