#include<iostream> using namespace std; class CFraction{ private: int nume; int deno; public: CFraction(int n=1,int d=1):nume(n),deno(d){}; CFraction operator+(CFraction &c); CFraction operator-(CFraction &c); CFraction operator*(CFraction &c); CFraction operator/(CFraction &c); CFraction operator+(int i); CFraction operator-(int i); CFraction operator*(int i); CFraction operator/(int i); CFraction operator-(); bool operator>(CFraction &c); CFraction simply(CFraction &c); friend CFraction operator+(int i,CFraction &c); friend int divisor(CFraction &c); friend int multiple(CFraction &c); void display(); }; CFraction CFraction::operator+(CFraction &c){ CFraction a; a.deno=deno*c.deno; a.nume=nume*c.deno+c.nume*deno; a=simply(a); return a; } CFraction CFraction::operator-(CFraction &c){ CFraction a; a.deno=deno*c.deno; a.nume=nume*c.deno-c.nume*deno; a=simply(a); return a; } CFraction CFraction::operator*(CFraction &c){ CFraction a; a.deno=deno*c.deno; a.nume=nume*c.nume; a=simply(a); return a; } CFraction CFraction::operator/(CFraction &c){ CFraction a; a.nume=nume*c.deno; a.deno=deno*c.nume; a=simply(a); return a; } CFraction CFraction::operator-(){ CFraction a; a.deno=nume; a.nume=deno; a=simply(a); return a; } bool CFraction::operator>(CFraction &c){ if(nume/deno>c.nume/c.deno) return true; else return false; } CFraction CFraction::simply(CFraction &c){ CFraction a; int b=divisor(c); a.nume=c.nume/b; a.deno=c.deno/b; return a; } int divisor(CFraction &c){ int n=min(c.deno,c.nume); for(int i=n;i>=0;i--){ if(c.deno%i==0 && c.nume%i==0){ return i; break; } } } CFraction CFraction::operator+(int i){ CFraction a; a.deno=deno; a.nume=nume+i*deno; a=simply(a); return a; } CFraction CFraction::operator-(int i){ CFraction a; a.deno=deno; a.nume=nume-i*deno; if(a.nume<0){ a.nume=-a.nume; a=simply(a); a.nume=-a.nume; return a; }else{ a=simply(a); return a; } } CFraction CFraction::operator*(int i){ CFraction a; a.deno=deno; a.nume=nume*i; a=simply(a); return a; } CFraction CFraction::operator/(int i){ CFraction a; a.deno=deno*i; a.nume=nume; a=simply(a); return a; } CFraction operator+(int i,CFraction &c){ CFraction a; a.deno=c.deno; a.nume=c.nume+i*c.deno; a=a.simply(a); return a; } /*int multiple(CFraction &c){ int n=max(c.deno,deno); while(n>0){ if(n%c.deno==0 && n%deno==0){ return n; break; }else{ n++; } } } */ void CFraction::display(){ cout<<nume<<"/"<<deno<<endl; } int main(){ CFraction t1(3,4),t2(3,2),t3,t4,t5; int i=1; cout<<"t1+t2="; t3=t1+t2; t3.display(); cout<<"t2-t1="; t3=t2-t1; t3.display(); cout<<"t1*t2="; t3=t1*t2; t3.display(); cout<<"t1/t2="; t3=t1/t2; t3.display(); cout<<"去倒数"; t3=-t1; t3.display(); if(t1>t2){ cout<<"t1>t2"<<endl; }else{ cout<<"t1<t2"<<endl; } cout<<"t1+"<<i<<"="; t4=t1+1; t4.display(); cout<<i<<"+t1="; t4=1+t1; t4.display(); cout<<"t1-"<<i<<"="; t4=t1-1; t4.display(); cout<<"t1*"<<i<<"="; t4=t1*1; t4.display(); cout<<"t1/"<<i<<"="; t4=t1/1; t4.display(); return 0; }
运行结果: