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

来源:互联网 发布:淘宝c店保证金是多少 编辑:程序博客网 时间:2024/06/13 12:23
问题及代码:
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作    者:宋健 * 完成日期:2015年 5月 18日 * 版 本 号:v1.0 * * 问题描述:在(1)的基础上,实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。例如:CFraction a(1,3),b; int i=2; 可以完成b=a+i;。同样,可以完成i+a, 45+a, a*27, 5/a等各种运算。 * 程序输入: * 程序输出: */#include<iostream>#include<Cmath>#include<cstdlib>#include <iomanip>using namespace std;class CFraction{private:    int nume;  // 分子    int deno;  // 分母public:    int gcd(int ,int);    CFraction(int nu=0,int de=1);   //构造函数,初始化用    void simplify();//化简(使分子分母没有公因子)    CFraction operator+(const CFraction &c);    CFraction operator-(const CFraction &c);    CFraction operator*(const CFraction &c);    CFraction operator/(const CFraction &c);    friend CFraction operator+( CFraction &c,int a);    friend CFraction operator+(int a, CFraction &c);    friend CFraction operator-( CFraction &c,int a);    friend CFraction operator-(int a, CFraction &c);    friend CFraction operator*( CFraction &c,int a);    friend CFraction operator*(int a, CFraction &c);    friend CFraction operator/( CFraction &c,int a);    friend CFraction operator/(int a, 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);    void display();};CFraction::CFraction(int nu,int de){    if(de!=0)    {        nume=nu;        deno=de;    }    else cout<<"分母不能为0!";}void CFraction::simplify(){    int m,n,r;    m=fabs(deno);    n=fabs(nume);    while(r=m%n)  // 求m,n的最大公约数    {        m=n;        n=r;    }    deno/=n;     // 化简    nume/=n;    if (deno<0)  // 将分母转化为正数    {        deno=-deno;        nume=-nume;    }}CFraction operator+( CFraction &c,int a){CFraction c1(c.nume+a*c.deno,c.deno);    c1.simplify();    return c1;}CFraction operator+(int a, CFraction &c){    CFraction b(a,1),z;    z=c+b;    return z;}CFraction operator-( CFraction &c,int a){    CFraction b(a,1);    return c-b;}CFraction operator-(int a, CFraction &c){    CFraction b(a,1);    return b-c;}CFraction operator*( CFraction &c,int a){    CFraction b(a,1);    return c*b;}CFraction operator*(int a, CFraction &c){    CFraction b(a,1);    return c*b;}CFraction operator/( CFraction &c,int a){    CFraction b(a,1);    return c/b;}CFraction operator/(int a, CFraction &c){    CFraction b(a,1);    return b/c;}CFraction CFraction::CFraction::operator+(const CFraction &c){    CFraction x(nume*c.deno+deno*c.nume,deno*c.deno);    x.simplify();    return x;}CFraction CFraction::operator-(const CFraction &c){    CFraction x(nume*c.deno-deno*c.nume,deno*c.deno);    x.simplify();    return x;}CFraction CFraction::operator*(const CFraction &c){    CFraction x(nume*c.nume,deno*c.deno);    x.simplify();    return x;}CFraction CFraction::operator/(const CFraction &c){    CFraction x(nume*c.deno,deno*c.nume);    x.simplify();    return x;}bool CFraction::operator>(const CFraction &c){    if(nume*c.deno>deno*c.nume)        return true;    else return false;}bool CFraction::operator<(const CFraction &c){    if(nume*c.deno<deno*c.nume)        return true;    else return false;}bool CFraction::operator==(const CFraction &c){    if(*this>c||*this<c)        return false;    else return true;}bool CFraction::operator!=(const CFraction &c){    if (*this==c)        return false;    else return true;}bool CFraction::operator>=(const CFraction &c){    if(*this<c)        return false;    else return true;}bool CFraction::operator<=(const CFraction &c){    if(*this>c)        return false;    else return true;}void CFraction::display(){    cout<<"("<<nume<<"/"<<deno<<")"<<endl;}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();    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;    CFraction c1(5,3),c2;    c2=c1+5;    c2.display();    c2=5+c1;    c2.display();    c2=c1-5;    c2.display();    c2=5-c1;    c2.display();    c2=c1*5;    c2.display();    c2=5*c1;    c2.display();    c2=c1/5;    c2.display();    c2=5/c1;    c2.display();    return 0;}

运行结果:

知识点总结:

在分数与整数混合运算过程中,不知道为什么在形参或实参之前加const会报错,不得已将const删除,还望老师解答

0 0