第八周【项目3-分数类中的运算符重载】改进

来源:互联网 发布:二维条码扫描软件 编辑:程序博客网 时间:2024/06/06 07:33
问题及代码:
/* *Copyright (c) 2014,烟台大学计算机学院 *ALL right reserved *文件名:分数类的雏形 *作者;童宇 *完成日期:2015年4月28日 *版本号v1.0 *问题描述:在(1)的基础上,实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。 *输入描述: *程序输出: */#include <iostream>using namespace std;class CFraction{private:    int nume;  // 分子    int deno;  // 分母public:    CFraction(int nu=0,int de=1):nume(nu),deno(de) {}    void simplify();            //化简(使分子分母没有公因子)    void output();    CFraction friend operator+(const CFraction &a,const CFraction &b);    CFraction friend operator-(const CFraction &a,const CFraction &b);    CFraction friend operator*(const CFraction &a,const CFraction &b);    CFraction friend operator/(const CFraction &a,const CFraction &b);    CFraction friend operator+(const CFraction &a,const int &b);    CFraction friend operator-(const CFraction &a,const int &b);    CFraction friend operator*(const CFraction &a,const int &b);    CFraction friend operator/(const CFraction &a,const int &b);    bool friend operator>(const CFraction &d,const CFraction &c);    bool friend operator<(const CFraction &d,const CFraction &c);    bool friend operator==(const CFraction &d,const CFraction &c);    bool friend operator!=(const CFraction &d,const CFraction &c);    bool friend operator>=(const CFraction &d,const CFraction &c);    bool friend operator<=(const CFraction &d,const CFraction &c);};bool operator>(const CFraction &d,const CFraction &c){    int this_nume,c_nume,common_deno;    this_nume=d.nume*c.deno;        // 计算分数通分后的分子,同分母为deno*c.deno    c_nume=c.nume*d.deno;    common_deno=d.deno*c.deno;    if ((this_nume-c_nume)*common_deno>0) return true;    return false;}bool operator<(const CFraction &d,const CFraction &c){    int this_nume,c_nume,common_deno;    this_nume=d.nume*c.deno;    c_nume=c.nume*d.deno;    common_deno=d.deno*c.deno;    if ((this_nume-c_nume)*common_deno<0) return true;    return false;}bool operator==(const CFraction &d,const CFraction &c){    if (d!=c) return false;    return true;}bool operator!=(const CFraction &d,const CFraction &c){    if (d>c || d<c) return true;    return false;}bool operator>=(const CFraction &d,const CFraction &c){    if (d<c) return false;    return true;}bool operator<=(const CFraction &d,const CFraction &c){    if (d>c) return false;    return true;}CFraction operator+(const CFraction &a,const CFraction &b){    CFraction c(a.nume*b.deno+b.nume*a.deno,a.deno*b.deno);    c.simplify();    return c;}CFraction operator-(const CFraction &a,const CFraction &b){    CFraction c(a.nume*b.deno-b.nume*a.deno,a.deno*b.deno);    c.simplify();    return c;}CFraction operator*(const CFraction &a,const CFraction &b){    CFraction c(a.nume*b.nume,a.deno*b.deno);    c.simplify();    return c;}CFraction operator/(const CFraction &a,const CFraction &b){    CFraction c(b.deno,b.nume);    CFraction d=a*c;    c.simplify();    return d;}CFraction operator+(const CFraction &a,const int &b){    CFraction c;    c.nume=b;    c.deno=1;    return (a+c);}CFraction operator-(const CFraction &a,const int &b){    CFraction c;    c.nume=b;    c.deno=1;    return (a-c);}CFraction operator*(const CFraction &a,const int &b){    CFraction c;    c.nume=b;    c.deno=1;    return (a*c);}CFraction operator/(const CFraction &a,const int &b){    CFraction c;    c.nume=b;    c.deno=1;    return (a/c);}void CFraction::simplify()            //化简(使分子分母没有公因子){    int a,b=nume,c=deno;    while(b%c!=0)    {        a=b%c;        b=c;        c=a;    }    nume/=c;    deno/=c;    if (deno<0)  // 将分母转化为正数    {        deno=-deno;        nume=-nume;    }}void CFraction::output(){    cout<<"("<<nume<<"/"<<deno<<")"<<endl;}int main(){    CFraction x(1,3),y(-5,10),s;    int a=3;    cout<<"分数x=1/3      y=-5/10"<<endl;    s=x+y;    cout<<"x+y=";    s.output();    s=x-y;    cout<<"x-y=";    s.output();    s=x*y;    cout<<"x*y=";    s.output();    s=x/y;    cout<<"x/y=";    s.output();    x.output();    if (x>y) cout<<"大于"<<endl;    if (x<y) cout<<"小于"<<endl;    if (x==y) cout<<"等于"<<endl;    y.output();    cout<<endl;    s=x+a;    cout<<"x=(1/3),a=3"<<endl;    cout<<"x+a=";    s.output();    s=x-a;    cout<<"x-a=";    s.output();    s=x*a;    cout<<"x*a=";    s.output();    s=x/a;    cout<<"x/a=";    s.output();    x.output();    if (x>a) cout<<"大于"<<endl;    if (x<a) cout<<"小于"<<endl;    if (x==a) cout<<"等于"<<endl;    y.output();    cout<<endl;    return 0;}

 

 

运行结果:

 


 

学习心得:

   认真的我发现之前的程序有误,不过本程序已经改正!

0 0