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

  • 相关阅读:
    IE9不能在线打开InfoPath表单的解决办法
    在Word中使用Quick Parts功能
    .NET WinForm程序在Windows7下实现玻璃效果和任务栏进度条效果
    如何对已经发布过的InfoPath模板进行修改
    .NET WinForm中给DataGridView自定义ToolTip并设置ToolTip的样式
    有关SharePoint Client Object应用的笔记
    解决VS 2010中编译程序时弹出"Type universe cannot resolve assembly"的错误
    SharePoint客户端对象模型"(400) Bad Request"错误
    C# Method Attribute and Reflection
    .NET WinForm下一个支持更新ProgressBar进度的DataGridView导出数据到Excel的类
  • 原文地址:https://www.cnblogs.com/mayuko/p/4567501.html
Copyright © 2011-2022 走看看