第十三周项目1——分数类中的运算符重载

来源:互联网 发布:博时大数据100好买 编辑:程序博客网 时间:2024/06/05 04:18

问题及代码:

/* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:main.cpp * 作    者:赵志君 * 完成日期:2016年5月26日 * 版 本 号:v1.0 * * 问题描述:(1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。 *           (2)在(1)的基础上,实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。 *                例如:CFraction a(1,3),b; int i=2; 可以完成b=a+i;。同样,可以完成i+a, 45+a, a*27, 5/a等各种运算。 *           (3)定义分数的一目运算+和-,分别代表分数取正和求反,将“按位取反运算符”~重载为分数的求倒数运算。 *           (4)定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。 */#include <iostream>using namespace std;class CFraction{private:    int nume;  // 分子    int deno;  // 分母public:    //构造函数及运算符重载的函数声明    CFraction(int n=0,int d=0):nume(n),deno(d){};    CFraction operator+(const CFraction &c);    CFraction operator-(const CFraction &c);    CFraction operator*(const CFraction &c);    CFraction 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);    bool operator != (const CFraction &c);    friend ostream &operator<<(ostream &out,CFraction c);    friend istream &operator>>(istream &input,CFraction c);    CFraction operator+(int i);    CFraction operator-(int i);    CFraction operator*(int i);    CFraction operator/(int i);    friend CFraction operator+(int i,CFraction &c);    friend CFraction operator-(int i,CFraction &c);    friend CFraction operator*(int i,CFraction &c);    friend CFraction operator/(int i,CFraction &c);    CFraction operator+();    CFraction operator-();    CFraction operator~();};CFraction CFraction::operator+(const CFraction &c){    CFraction t;    int y,m,n;    m=t.nume=nume*c.deno+c.nume*deno;    n=t.deno=deno*c.deno;    n=t.nume%t.deno;    while(y)    {        y=n%m;        n=m;        m=y;    }    t.nume=t.nume/n;    t.deno=t.deno/n;    return t;}CFraction CFraction::operator-(const CFraction &c){    CFraction t;    int y,m,n;    m=t.nume=nume*c.deno-c.nume*deno;    n=t.deno=deno*c.deno;    while(y)    {        y=n%m;        n=m;        m=y;    }    t.nume=t.nume/n;    t.deno=t.deno/n;    return t;}CFraction CFraction::operator*(const CFraction &c){    CFraction t;    int y,m,n;    m=t.nume=nume*c.nume;    n=t.deno=deno*c.deno;    while(y)    {        y=n%m;        n=m;        m=y;    }    t.nume=t.nume/n;    t.deno=t.deno/n;    return t;}CFraction CFraction::operator/(const CFraction &c){    CFraction t;    int y,m,n;    m=t.nume=nume*c.deno;    n=t.deno=deno*c.nume;    while(y)    {        y=n%m;        n=m;        m=y;    }    t.nume=t.nume/n;    t.deno=t.deno/n;    return t;}bool CFraction::operator>(const CFraction &c){    double a,b;    a=(double)nume/deno;    b=(double)c.nume/deno;    if(a>b)        return true;    else        return false;}bool CFraction::operator<(const CFraction &c){    double a,b;    a=(double)nume/deno;    b=(double)c.nume/deno;    if(a<b)        return true;    else        return false;}bool CFraction::operator>=(const CFraction &c){    double a,b;    a=(double)nume/deno;    b=(double)c.nume/deno;    if(a>=b)        return true;    else        return false;}bool CFraction::operator<=(const CFraction &c){    double a,b;    a=(double)nume/deno;    b=(double)c.nume/deno;    if(a<=b)        return true;    else        return false;}bool CFraction::operator!=(const CFraction &c){    double a,b;    a=(double)nume/deno;    b=(double)c.nume/deno;    if(a!=b)        return true;    else        return false;}bool CFraction::operator==(const CFraction &c){    double a,b;    a=(double)nume/deno;    b=(double)c.nume/deno;    if(a==b)        return true;    else        return false;}ostream &operator<<(ostream &out,CFraction c){    if(c.deno==1)        out<<c.nume;    else        out<<c.nume<<"/"<<c.deno;    return out;}istream &operator>>(istream &input,CFraction c){    char a;    input>>c.nume>>a>>c.deno;    return input;}CFraction CFraction::operator+(int i){    CFraction c;    c.deno=deno;    c.nume=nume+c.deno*i;    return c;}CFraction CFraction::operator-(int i){    CFraction c;    c.deno=deno;    c.nume=nume-c.deno*i;    return c;}CFraction CFraction::operator*(int i){    CFraction c;    c.deno=deno;    c.nume=nume*i;    return c;}CFraction CFraction::operator/(int i){    CFraction c;    c.deno=deno*i;    c.nume=nume;    return c;}CFraction operator+(int i,CFraction &c){    CFraction a;    a.deno=c.deno;    a.nume=c.nume+c.deno*i;    return a;}CFraction operator-(int i,CFraction &c){    CFraction a;    a.deno=c.deno;    a.nume=c.deno*i-c.nume;    return a;}CFraction operator*(int i,CFraction &c){    CFraction a;    a.deno=c.deno;    a.nume=c.nume*i;    return a;}CFraction operator/(int i,CFraction &c){    CFraction a;    a.deno=c.nume;    a.nume=c.deno*i;    return a;}CFraction CFraction::operator+(){    return *this;}CFraction CFraction::operator-(){    CFraction c;    c.nume=-nume;    c.deno=deno;    return c;}CFraction CFraction::operator~(){    CFraction c;    c.nume=deno;    c.deno=nume;    if(c.deno==0)    {        cout<<"不可以取倒数!"<<endl;        return *this;    }    else        return c;}//重载函数的实现及用于测试的main()函数int main(){    CFraction a(5,6),b(2,3);    cout<<"a="<<a<<"  b="<<b<<endl;    cout<<"a+b="<<a+b;    cout<<"  a-b="<<a-b;    cout<<"  a*b="<<a*b;    cout<<"  a/b="<<a/b<<endl<<endl;    CFraction m(3,2),n(6,5);    cout<<"m="<<m<<"  n="<<n<<"  a="<<a<<"  b="<<b<<endl;    if(m>b)        cout<<"m>b  ";    if(b<a)        cout<<"b<a  ";    if(m>=b)        cout<<"m>=b  ";    if(b<=a)        cout<<"b<=a  ";    if(m==n)        cout<<"m==n  ";    if(n!=a)        cout<<"n!=a"<<endl<<endl;    cout<<"n="<<n<<"  n+2="<<n+2<<endl;    cout<<"n="<<n<<"  n-2="<<n-2<<endl;    cout<<"n="<<n<<"  n*2="<<n*2<<endl;    cout<<"n="<<n<<"  n/2="<<n/2<<endl;    cout<<"n="<<n<<"  2+n="<<2+n<<endl;    cout<<"n="<<n<<"  2-n="<<2-n<<endl;    cout<<"n="<<n<<"  2*n="<<2*n<<endl;    cout<<"n="<<n<<"  2/n="<<2/n<<endl;    cout<<"m="<<m<<"  +m="<<+m<<endl;    cout<<"m="<<m<<"  -m="<<-m<<endl;    cout<<"m="<<m<<"  ~m="<<~m<<endl;    return 0;}

运行结果:


0 0