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

来源:互联网 发布:hello树先生知乎 编辑:程序博客网 时间:2024/05/28 16:06
问题及代码:
/* *Copyright (c) 2014,烟台大学计算机学院 *ALL right reserved *文件名:分数类的雏形 *作者;童宇 *完成日期:2015年3月31日 *版本号v1.0 *问题描述:设计一个简单的分数类,完成对分数的几个运算 *输入描述: *程序输出: */#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);    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;}
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;    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;    return 0;}

 

 

运行结果:

 

 

学习心得:

  面对这样一个大的项目,一开始有点心烦,不过慢慢做下来还是能发现自己的许多的不足,收货很大。

0 0
原创粉丝点击