项目1-分数类中的运算符重载2

原创 2016年05月30日 11:20:39

问题及代码:

    /*copyright(c)2016.烟台大学计算机学院
     * All rights reserved,
     * 文件名称:text.Cpp
     * 作者:李一波
     * 完成日期:2016年5月30日
     * 版本号:vc++6.0
     *
     * 问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。
     * 输入描述:
     * 程序输出:
     */
    #include <iostream>
    using namespace std;
    class CFraction
    {
    private:
        int nume;  // 分子
        int deno;  // 分母
    public:
        CFraction(){}
        CFraction(int n,int d):nume(n),deno(d){}
        void show();
        CFraction operator+(const CFraction &a);
        CFraction operator-(const CFraction &a);
        CFraction operator*(const CFraction &a);
        CFraction operator/(const CFraction &a);
        CFraction operator+(const int &a);
        CFraction operator-(const int &a);
        CFraction operator*(const int &a);
        CFraction operator/(const int &a);
        bool operator>(const CFraction &a);
        bool operator<(const CFraction &a);
        bool operator>=(const CFraction &a);
        bool operator<=(const CFraction &a);
        bool operator==(const CFraction &a);
        bool operator!=(const CFraction &a);
        CFraction hua_jian();
    };
    CFraction CFraction::operator+(const CFraction &a)
    {
        CFraction c;
        if(deno==a.deno)
            c.nume=nume+a.nume;
        else
        {
            c.deno=deno*a.deno;
            c.nume=nume*a.deno+a.nume*deno;
        }
        return c.hua_jian();
    }
    CFraction CFraction::operator-(const CFraction &a)
    {
        CFraction c;
        if(deno==a.deno)
            c.nume=nume-a.nume;
        else
        {
            c.deno=deno*a.deno;
            c.nume=nume*a.deno-a.nume*deno;
        }
        return c.hua_jian();
    }
    CFraction CFraction::operator*(const CFraction &a)
    {
        CFraction c;
        c.deno=deno*a.deno;
        c.nume=nume*a.nume;
        return c.hua_jian();
    }
    CFraction CFraction::operator/(const CFraction &a)
    {
        CFraction c;
        c.deno=deno*a.nume;
        c.nume=nume*a.deno;
        return c.hua_jian();
    }
    CFraction CFraction::operator+(const int &a)
    {
        CFraction c;
        c.deno=deno;
        c.nume=nume+deno*a;
        return c.hua_jian();
    }
    CFraction CFraction::operator-(const int &a)
    {
        CFraction c;
        c.deno=deno;
        c.nume=nume-deno*a;
        return c.hua_jian();
    }
    CFraction CFraction::operator*(const int &a)
    {
        CFraction c;
        c.deno=deno;
        c.nume=nume*a;
        return c.hua_jian();
    }
    CFraction CFraction::operator/(const int &a)
    {
        CFraction c;
        c.deno=deno*a;
        c.nume=nume;
        return c.hua_jian();
    }
    bool CFraction::operator>(const CFraction &a)
    {
        if(deno==a.deno)
            if(nume>a.nume)
                return 1;
            else
                return -1;
        else
        {
            if(nume*a.deno>a.nume*deno)
                return 1;
            else
                return -1;
        }
    }
    bool CFraction::operator<(const CFraction &a)
    {
        if(deno==a.deno)
            if(nume<a.nume)
                return 1;
            else
                return -1;
        else
        {
            if(nume*a.deno<a.nume*deno)
                return 1;
            else
                return -1;
        }
    }
    bool CFraction::operator>=(const CFraction &a)
    {
        if(deno==a.deno)
            if(nume>=a.nume)
                return 1;
            else
                return -1;
        else
        {
            if(nume*a.deno>=a.nume*deno)
                return 1;
            else
                return -1;
        }
    }
    bool CFraction::operator<=(const CFraction &a)
    {
        if(deno==a.deno)
            if(nume<=a.nume)
                return 1;
            else
                return -1;
        else
        {
            if(nume*a.deno<=a.nume*deno)
                return 1;
            else
                return -1;
        }
    }
    bool CFraction::operator==(const CFraction &a)
    {
        if(deno==a.deno)
            if(nume==a.nume)
                return 1;
            else
                return -1;
        else
        {
            if(nume*a.deno==a.nume*deno)
                return 1;
            else
                return -1;
        }
    }
    bool CFraction::operator!=(const CFraction &a)
    {
        if(deno==a.deno)
            if(nume!=a.nume)
                return 1;
            else
                return -1;
        else
        {
            if(nume*a.deno!=a.nume*deno)
                return 1;
            else
                return -1;
        }
    }
    CFraction CFraction::hua_jian()
    {
        int t,t1,t2;
        t1=nume;
        t2=deno;
        while(t2!=0)
        {
            t=t1%t2;
            t1=t2;
            t2=t;
        }
        nume/=t1;
        deno/=t1;
        if(deno<0)
        {
            deno=-deno;
            nume=-nume;
        }
        return *this;
    }
    void CFraction::show()
    {
        cout<<nume<<'/'<<deno<<endl;
    }
    //重载函数的实现及用于测试的main()函数
    int main()
    {
        CFraction c1(2,3),c2(5,6),c3;
        int i=2;
        c3=c1+c2;
        cout<<"c1+c2之和是:";
        c3.show();
        c3=c1-c2;
        cout<<"c1-c2之差是:";
        c3.show();
        c3=c1*c2;
        cout<<"c1*c2是:";
        c3.show();
        c3=c1/c2;
        cout<<"c1/c2是:";
        c3.show();
        c3=c1+i;
        cout<<"c1+i之和是:";
        c3.show();
        c3=c1-i;
        cout<<"c1-i之差是:";
        c3.show();
        c3=c1*i;
        cout<<"c1*i是:";
        c3.show();
        c3=c1/i;
        cout<<"c1/i是:";
        c3.show();
        if((c1>c2)==1)
            cout<<"c1大于c2"<<endl;
        else
            cout<<"c1小于c2"<<endl;
        if((c1<c2)==1)
            cout<<"c1小于c2"<<endl;
        else
            cout<<"c1大于c2"<<endl;
        if((c1>=c2)==1)
            cout<<"c1大于等于c2"<<endl;
        else
            cout<<"c1小于c2"<<endl;
        if((c1<=c2)==1)
            cout<<"c1小于等于c2"<<endl;
        else
            cout<<"c1大于c2"<<endl;
        if((c1==c2)==1)
            cout<<"c1等于c2"<<endl;
        else
            cout<<"c1不等于c2"<<endl;
        if((c1!=c2)==1)
            cout<<"c1不等于c2"<<endl;
        else
            cout<<"c1等于c2"<<endl;
        return 0;
    }

运行结果:

C++实践参考——分数类中的运算符重载

【项目1-分数类中的运算符重载】   (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。class CFraction { private: ...
  • sxhelijian
  • sxhelijian
  • 2016年05月19日 21:44
  • 3202

C++之运算符重载(分数的运算)

今天在小甲鱼老师的视频中学到了运算符重载知识,并通过实例进行了讲解,先将源代码向大家分享 至今扔没有完全搞懂欧几里得的具体原理,欢迎大家多多交流。 部分转载:http://blog.csdn.net/...
  • xk_snail
  • xk_snail
  • 2015年04月17日 22:10
  • 462

定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。

问题及代码: /* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作 者:李磊涛 *完成时间:2016...
  • a1724002236
  • a1724002236
  • 2016年05月28日 14:56
  • 325

第八周-运算符重载-分数类的运算符重载(1)-加减乘除以及大小比较

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:刘畅 * 完成...
  • Liuchang54
  • Liuchang54
  • 2015年04月25日 13:20
  • 876

实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算

问题及代码: /* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作 者:李磊涛 *完成时间:2016...
  • a1724002236
  • a1724002236
  • 2016年05月28日 14:08
  • 1059

《C++语言基础》实践参考——分数类中的运算符重载

返回:贺老师课程教学链接【项目3-分数类中的运算符重载】  (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。可以在第4周分数类代码的基础上开始...
  • sxhelijian
  • sxhelijian
  • 2015年04月21日 18:40
  • 1737

第13周项目1-分数类中的运算符重载

/* *Copyright(C) 2016,计算机与控制工程学院 *All rights reserved. *文件名:zhang.cpp *作者:张志新 *完成日期:2016年5月30日 *版本号:...
  • hello_world8888
  • hello_world8888
  • 2016年05月31日 15:03
  • 310

第13周项目1-分数类中的运算符重载

#include #include using namespace std; class CFraction { private:     int nume;  // 分子     int den...
  • j19961113
  • j19961113
  • 2016年06月14日 12:51
  • 245

第十三周项目-项目1-(2)-分数类中的运算符重载

/*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:刘涛 * 完成日期:2016年5月21日 *...
  • lemon_lebron
  • lemon_lebron
  • 2016年05月21日 14:48
  • 435

成员函数重载运算符和友元函数重载运算符的比较

1.对双目运算符而言,成员函数重载运算符的函数参数表中只有一个参数,而用友元函数重载运算符函数参数表中含有两个参数。   对单木运算符来说,成员函数重载运算符的函数参数表中没有参数,而用友元函数重载运...
  • u011450537
  • u011450537
  • 2014年11月13日 10:26
  • 2781
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:项目1-分数类中的运算符重载2
举报原因:
原因补充:

(最多只允许输入30个字)