第十三周上机时间项目——项目1-分数类中的运算符重载

来源:互联网 发布:vcr制作软件 编辑:程序博客网 时间:2024/06/05 02:41
  •  *All rights reserved. 
  •  *文件名称:file.cpp 
  •  *作    者:郑志金
  •  *完成日期:2016年6月11日 
  •  *版 本 号:v1.0 
  •  * 
  •  *问题描述:实现分数类的运算符重载,在分数类中可以完成加减乘除
  •  *输入描述:两个分数
  •  *输出描述:两个分数的四则运算

     

    #include<iostream>
    #include <Cmath>

    using namespace std;
    class CFraction
    {
    private:
        int nume;
        int deno;
    public:
        friend istream &operator>>(istream &in,CFraction &x);
        friend ostream &operator<<(ostream &out,CFraction x);


       CFraction(int nu=0,int de=1):nume(nu),deno(de) {}

        CFraction operator+(CFraction a);
        CFraction operator-(CFraction a);
        CFraction operator*(CFraction a);
        CFraction operator/(CFraction a);
        bool operator>(const CFraction &c);
        bool operator<(const CFraction &c);
        bool operator==(const CFraction &c);
        bool operator!=(const CFraction &c);
        bool operator>=(const CFraction &c);
        bool operator<=(const CFraction &c);
        void simplify();

    };
    CFraction CFraction::operator+(CFraction a)
     {
        CFraction c;
        c.nume=nume*a.deno+a.nume*deno;
        c.deno=deno*a.deno;
        c.simplify();
        return c;

     }
    CFraction CFraction::operator-(CFraction a)
    {
        CFraction c;
        c.nume=nume*a.deno-a.nume*deno;
        c.deno=deno*a.deno;
        c.simplify();
        return c;

    }
    CFraction CFraction::operator*(CFraction a)
    {
        CFraction c;
        c.nume=a.nume*nume;
        c.deno=a.deno*deno;
        c.simplify();
        return c;

    }
    CFraction CFraction::operator/(CFraction a)
    {
         CFraction c;
        c.nume=nume*a.deno;
        c.deno=deno*a.nume;
        c.simplify();
        return c;

    }
    istream &operator>>(istream &in,CFraction &x)
    {
        char ch;
        while(1)
        {
            cin>>x.nume>>ch>>x.deno;
            if (x.deno==0)
                cerr<<"分母为0, 请重新输入\n";
            else if(ch!='/')
                cerr<<"格式错误(形如m/n)! 请重新输入\n";
            else
                break;
        }
        return cin;
    }


    ostream &operator<<(ostream &out,CFraction x)
    {
        cout<<x.nume<<'/'<<x.deno;
        return cout;
    }


    void CFraction::simplify()
    {
         int m,n,r;
        n=fabs(deno);
        m=fabs(nume);
        while(r=m%n)
        {
            m=n;
            n=r;
        }
        deno/=n;
        nume/=n;
        if (deno<0)
        {
            deno=-deno;
            nume=-nume;
        }

    }
    int main()
    {
        CFraction x,y,s;
        cout<<"输入x: ";
        cin>>x;
        cout<<"输入y: ";
        cin>>y;
        s=x+y;
        cout<<"x+y="<<s<<endl;
        s=x-y;
        cout<<"x-y="<<s<<endl;
        s=x*y;
        cout<<"x*y="<<s<<endl;
        s=x/y;
        cout<<"x/y="<<s<<endl;

        return 0;
    }

  • 0 0
    原创粉丝点击