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

  • 相关阅读:
    第六课 变量和常量
    第六课 实型(浮点型)
    第五课 字符型数据 (主函数冲突)
    第四课 整型数据(主函数冲突)
    第二课(需订正)运行失败解决方法
    第三课 数据类型分类(关键字)
    第二课
    第一课
    贝叶斯滤波与卡尔曼滤波第九讲笔记《粒子滤波》
    贝叶斯滤波与卡尔曼滤波第八讲代码
  • 原文地址:https://www.cnblogs.com/mayuko/p/4567501.html
Copyright © 2011-2022 走看看