zoukankan      html  css  js  c++  java
  • 第八周项目3-分数类中的运算符重载

    实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。可以在第4周分数类代码的基础上开始工作。

    /*
    * Copyright (c) 2015,烟台大学计算机学院
    * All right reserved.
    * 作者:邵帅
    * 文件:Demo.cpp
    * 完成时间:2015年04月29日
    * 版本号:v1.0
    */
    #include <iostream>
    using namespace std;
    class CFraction
    {
    private:
        int nume;  // 分子
        int deno;  // 分母
    public:
        //构造函数及运算符重载的函数声明
        CFraction(int n=1,int d=1);
        CFraction operator+(CFraction &d);
        CFraction operator-(CFraction &d);
        CFraction operator*(CFraction &d);
        CFraction operator/(CFraction &d);
        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 setCFraction(int n,int d);
        void display();
        void simplify();
    };
    int gcd(int m, int n);
    //重载函数的实现及用于测试的main()函数
    CFraction :: CFraction(int n,int d)
    {
        nume=n;
        deno=d;
    }
    void CFraction::setCFraction(int n, int d)
    {
        nume=n;
        deno=d;
    }
    void CFraction::display()
    {
        cout<<nume<<"/"<<deno<<endl;
    }
    void CFraction::simplify()//化简
    {
        int n=gcd(deno, nume);
        deno/=n;
        nume/=n;
    }
    int gcd(int m, int n) //求最大公约数
    {
        int r;
        if (m<n)
        {
            r=m;
            m=n;
            n=r;
        }
        while(r=m%n)
        {
            m=n;
            n=r;
        }
        return n;
    }
    CFraction CFraction::operator+(CFraction &d)
    {
        CFraction m;
        m.nume=nume*d.deno+d.nume*deno;
        m.deno=deno*d.deno;
        m.simplify();
        return m;
    }
    CFraction CFraction::operator-(CFraction &d)
    {
        CFraction m;
        m.nume=nume*d.deno-d.nume*deno;
        m.deno=deno*d.deno;
        m.simplify();
        return m;
    }
    CFraction CFraction::operator*(CFraction &d)
    {
        CFraction m;
        m.nume=nume*d.nume;
        m.deno=deno*d.deno;
        m.simplify();
        return m;
    }
    CFraction CFraction::operator/(CFraction &d)
    {
        CFraction m;
        m.nume=nume*d.deno;
        m.deno=deno*d.nume;
        m.simplify();
        return m;
    }
    bool CFraction::operator>(const CFraction &c)
    {
        int anume1,anume2,both;
        both=this->deno*c.deno;
        anume1=nume*c.deno;
        anume2=c.nume*deno;
        if ((anume1>anume2&&both>0)||(anume1<anume2&&both<0)) return true;
        return false;
    }
    bool CFraction::operator<(const CFraction &c)
    {
        int anume1,anume2,both;
        both=this->deno*c.deno;
        anume1=nume*c.deno;
        anume2=c.nume*deno;
        if ((anume1-anume2)*both<0) return true;
        return false;
    }
    bool CFraction::operator==(const CFraction &c)
    {
        if (*this!=c) return false;
        return true;
    }
    bool CFraction::operator>=(const CFraction &c)
    {
        if (*this<c) return false;
        return true;
    }
    bool CFraction::operator<=(const CFraction &c)
    {
        if (*this>c) return false;
        return true;
    }
    bool CFraction::operator!=(const CFraction &c)
    {
        if (*this>c || *this<c) return true;
        return false;
    }
    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.display();
        s=x-y;
        cout<<"x-y=";
        s.display();
        s=x*y;
        cout<<"x*y=";
        s.display();
        s=x/y;
        cout<<"x/y=";
        s.display();
    
        x.display();
        if (x>y) cout<<"大于"<<endl;
        if (x<y) cout<<"小于"<<endl;
        if (x==y) cout<<"等于"<<endl;
        y.display();
        cout<<endl;
        return 0;
    }
    

    运行结果:



    @ Mayuko

  • 相关阅读:
    delphi 遇到Line too long(more than 1023 characters问题,将原有代码分离出过程来调用,调用使用 过程名字(self) 调用
    sql 从房间号中或从含有几个"-"间隔的字符串中,截取楼层数,或截取第几个"-"后的前几个字符或数字
    delphi mac地址 网卡地址获取,如果有无线网卡连接情况,mac地址随机获取某个本地连接网卡地址,要都写进去判断
    delphi 输入年月判断天数,判断指定年份与月份判断当月有多少天
    在SQL SERVER中查询数据库中第几条至第几条之间的数据SQL语句写法
    手动修改PHP页面返回状态码
    PHPExcel 导出包含图片excel
    windows apache启动报错
    mysql正则查询 模糊查询
    symfony安装总结
  • 原文地址:https://www.cnblogs.com/mayuko/p/4567501.html
Copyright © 2011-2022 走看看