#include <iostream>
using namespace std;
#include "jun.h"
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
CFraction(){nume=0;deno=0;}
CFraction(int n,int d) :nume(n),deno(d){}
CFraction operator +(CFraction &x);
CFraction operator -(CFraction &x);
CFraction operator *(CFraction &x);
CFraction operator /(CFraction &x);
bool operator >(CFraction &x);
bool operator <(CFraction &x); //构造函数及运算符重载的函数声明
bool operator =(CFraction &x);
bool operator >=(CFraction &x);
bool operator <=(CFraction &x);
bool operator !=(CFraction &x);//死记住开头的形式,
//CFraction operator-();/
int f(int,int);
int g(int,int);
void display();
friend ostream& operator << (ostream&,CFraction&);
friend istream& operator >> (istream&,CFraction&);
};
CFraction CFraction::operator +(CFraction &x)
{
CFraction c;
int t=f(deno,x.deno);
c.nume=nume*(t/deno)+(t/x.deno)*x.nume;
c.deno=t;
t=g(c.nume,c.deno);
c.nume=c.nume/t;
c.deno=c.deno/t;
return c;
}
CFraction CFraction::operator -(CFraction &x)
{
CFraction c;
int t=f(deno,x.deno);
c.nume=nume*(t/deno)-(t/x.deno)*x.nume;
c.deno=t;
t=g(c.nume,c.deno);
c.nume=c.nume/t;
c.deno=c.deno/t;
return c;
}
CFraction CFraction::operator *(CFraction &x)
{
CFraction c;
int t;
c.nume=nume*x.nume;
c.deno=deno*x.deno;
t=g(c.nume,c.deno);
c.nume=c.nume/t;
c.deno=c.deno/t;
return c;
}
CFraction CFraction::operator /(CFraction &x)
{
CFraction c;
int t;
c.nume=nume*x.deno;
c.deno=deno*x.nume;
t=g(c.nume,c.deno);
c.nume=c.nume/t;
c.deno=c.deno/t;
return c;
}
bool CFraction::operator >(CFraction &x)
{
//bool flag=true;
CFraction c;
int t=f(deno,x.deno);
c.nume=nume*(t/deno)-(t/x.deno)*x.nume;
if(c.nume>0)
{
return true;
}
else
{
//flag=false;
return false;
}
}
bool CFraction::operator <(CFraction &x)
{
//bool flag=true;
int t=f(deno,x.deno);
CFraction c;
c.nume=nume*(t/deno)-(t/x.deno)*x.nume;
if(c.nume<0)
{
return true;
}
else
{
//flag=false;
return false;
}
}
bool CFraction::operator =(CFraction &x)
{
//bool flag=true;
int t=f(deno,x.deno);
CFraction c;
c.nume=nume*(t/deno)-(t/x.deno)*x.nume;
if(c.nume=0)
{
return true;
}
else
{
//flag=false;
return false;
}
}
bool CFraction::operator >=(CFraction &x)
{
//bool flag=false;
int t=f(deno,x.deno);
CFraction c;
c.nume=nume*(t/deno)-(t/x.deno)*x.nume;
if(c.nume<0)
{
return false;
}
else
{
//flag=true;
return true;
}
}
bool CFraction::operator <=(CFraction &x)
{
//bool flag=false;
int t=f(deno,x.deno);
CFraction c;
c.nume=nume*(t/deno)-(t/x.deno)*x.nume;
if(c.nume>0)
{
return false;
}
else
{
//flag=true;
return true;
}
}
bool CFraction::operator !=(CFraction &x)//注意开头的形式
{
//bool flag=false;
int t=f(deno,x.deno);
CFraction c;
c.nume=nume*(t/deno)-(t/x.deno)*x.nume;
if(c.nume==0)
{
return false;
}
else
{
//flag=true;
return true;
}
}
/*CFraction CFraction:: operator -()
{
//*this=this*(-1);
return(0- *this);
}*/
int CFraction::f(int x,int y)
{
int t,p,r;
if(x<y)
{
t=x;
x=y;
y=t;
}
p=x*y;
while(y!=0)
{
r=x%y;
x=y;
y=r;
}
return p/x;
}
int CFraction:: g(int x,int y)
{
int t,p,r;
if(x<y)
{
t=x;
x=y;
y=t;
}
p=x*y;
while(y!=0)
{
r=x%y;
x=y;
y=r;
}
return x;
}
void CFraction:: display()
{
cout<<nume<<'/'<<deno;
}
void main()
{
//CFraction x1(3,12),x2(1,3);
CFraction x1,x2;
cin>>x1>>x2;
cout<<"x1=";
cout<<x1<<endl;
x1.display();
cout<<endl;
cout<<"x2=";
cout<<x2<<endl;
x2.display();
cout<<endl;
cout<<"x1+x2=:";
cout<<(x1+x2);
cout<<endl;
cout<<"x1-x2=:";
cout<<(x1-x2);
cout<<endl;
cout<<"x1*x2=:";
cout<<(x1*x2);
cout<<endl;
cout<<"x1/x2=:";
cout<<(x1/x2);
cout<<endl;
if(x1<x2) cout<<"x1<x2";
cout<<endl;
if(x1!=x2) cout<<"x1!=x2";
}
ostream& operator << (ostream& output,CFraction&x)
{
output<<x.nume<<'/'<<x.deno;
return output;
}
istream& operator >> (istream& input,CFraction&x)
{
cout<<"请输入数值:";
input>>x.nume>>x.deno;
return input;
}
感悟:经过定义“<<"和”》“之后发现,这样可以使程序更加通俗易懂简单,且不用再定义输出函数。