#include<iostream.h>
//using namespace std;
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
CFraction(int n=0,int d=0);
CFraction operator +(CFraction &c);
CFraction operator -(CFraction &c);
CFraction operator *(CFraction &c);
CFraction operator /(CFraction &c);
CFraction operator +();
CFraction operator -();
CFraction operator ~();
bool operator >(CFraction &c);
bool operator <(CFraction &c);
bool operator >=(CFraction &c);
bool operator <=(CFraction &c);
bool operator !=(CFraction &c);
bool operator ==(CFraction &c);
friend istream &operator>>(istream &input,CFraction &c);
friend ostream &operator<<(ostream &input,CFraction &c);
void display();
void simplify();
};
CFraction::CFraction(int n,int d):nume(n),deno(d){}
istream &operator >>(istream &input,CFraction &c)
{
input>>c.nume>>c.deno;
return input;
}
ostream &operator<<(ostream &output,CFraction &c)
{
output<<c.nume<<"/"<<c.deno;
return output;
}
CFraction CFraction::operator +(CFraction &c)
{
CFraction result;
result.deno=deno*c.deno;
result.nume=nume*c.deno+deno*c.nume;
return result;
}
CFraction CFraction::operator -(CFraction &c)
{
CFraction result;
result.deno=deno*c.deno;
result.nume=nume*c.deno-deno*c.nume;
return result;
}
CFraction CFraction::operator *(CFraction &c)
{
CFraction result;
result.deno=deno*c.deno;
result.nume=nume*c.nume;
return result;
}
CFraction CFraction::operator /(CFraction &c)
{
CFraction result;
result.deno=deno*c.nume;
result.nume=nume*c.deno;
return result;
}
bool CFraction::operator >(CFraction &c)
{
double a=(double)nume/(double)deno;
double b=(double)c.nume/(double)c.deno;
if(a>b)
return true;
else
return false;
}
bool CFraction::operator <(CFraction &c)
{
double a=(double)nume/(double)deno;
double b=(double)c.nume/(double)c.deno;
if(a<b)
return true;
else
return false;
}
bool CFraction::operator >=(CFraction &c)
{
double a=(double)nume/(double)deno;
double b=(double)c.nume/(double)c.deno;
if(a>=b)
return true;
else
return false;
}
bool CFraction::operator <=(CFraction &c)
{
double a=(double)nume/(double)deno;
double b=(double)c.nume/(double)c.deno;
if(a<=b)
return true;
else
return false;
}
bool CFraction::operator ==(CFraction &c)
{
double a=(double)nume/(double)deno;
double b=(double)c.nume/(double)c.deno;
if(a==b)
return true;
else
return false;
}
bool CFraction::operator !=(CFraction &c)
{
double a=(double)nume/(double)deno;
double b=(double)c.nume/(double)c.deno;
if(a!=b)
return true;
else
return false;
}
CFraction CFraction::operator +()
{
return CFraction(nume,deno);
}
CFraction CFraction::operator -()//相反数
{
return CFraction(-nume,deno);
}
CFraction CFraction::operator ~()//倒数
{
CFraction x;
x.nume=deno;
x.deno=nume;
if(x.deno<0)
{
x.deno=-x.deno;
x.nume=-x.nume;
}
return x;
}
void CFraction::display()
{
cout<<nume<<"/"<<deno<<endl;
}
void CFraction::simplify()
{
int n;
int a=nume;
int b=deno;
while(n=a%b)//求最大公约数
{
a=b;
b=n;
}
nume/=b;
deno/=b;
if(deno<0)//保证符号在分子上
{
nume=-nume;
deno=-deno;
}
}
int main()
{
CFraction c1(3,2),c2(9,7),c3,c4(9,1);
cout<<"c1:"<<c1<<endl;
cout<<"c2:"<<c2<<endl;
c3=c1+c2;
cout<<"c1+c2:"<<c3<<endl;
c3=c1-c2;
cout<<"c1-c2:"<<c3<<endl;
c3=c1*c2;
c3.simplify();
cout<<"c1*c2:"<<c3<<endl;
c3=c1/c2;
c3.simplify();
cout<<"c1/c2:"<<c3<<endl;
if(c1>c2)
cout<<"比较:"<<c1<<">"<<c2<<endl;
cout<<"-c1:"<<-c1<<endl;
cout<<"+c1:"<<+c1<<endl;
cout<<"~c4:"<<~c4<<endl;
return 0;
}
运行结果: