第9周任务3

时间:2022-08-05 08:03:37
#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;
}


 

第9周任务3

感悟:经过定义“<<"和”》“之后发现,这样可以使程序更加通俗易懂简单,且不用再定义输出函数。