原先的程序,如果两个数相同的情况下,会停止运行,(化简的时候分母为零),修改后的代码为:
#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-();
bool operator>(CFraction &c);
CFraction simply(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;
if(a.nume==0)
{
return a;
}else{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;
}
}
}
void CFraction::display()
{
if(nume==0)
cout<<0<<endl;
else
cout<<nume<<"/"<<deno<<endl;
}
int main(){
CFraction t1(1,3),t2(3,9),t3,t4,t5;
cout<<"第一个分数为:";
t1.display();
cout<<"第二个分数为:";
t2.display();
cout<<endl;
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;
}
return 0;
}
结果:
心得体会:
细心,心细。