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

来源:互联网 发布:宁夏隆盛软件下载 编辑:程序博客网 时间:2024/06/06 04:48

问题及代码:

/**Copyright (c)2014,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:Project.cpp*作    者:chenqin.*完成日期:2015年5月20日*版 本 号:v1.0**问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。可以在第4周分数类代码的基础上开始工作。*程序输入:略*程序输出:略*/#include <iostream>#include <cmath>#include <cstdlib>using namespace std;int gcd(int m,int n);class CFraction{private:    int nume;  // 分子    int deno;  // 分母public:    CFraction(int nu=0,int de=1);   //构造函数,初始化用    void simplify();   //化简(使分子分母没有公因子)    void display();    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);};CFraction::CFraction(int nu,int de)//构造函数,初始化用{    if (de!=0)    {        nume=nu;        deno=de;    }    else    {        cerr<<"发生错误,退出程序";        exit(0);    }}void CFraction::simplify() //分数化简{    int m,n,r;    m=(fabs(deno));    n=(fabs(nume));    while(r=m%n)    {        m=n;        n=r;    }    deno/=n;    nume/=n;    if(deno<0)    {        deno=-deno;        nume=-nume;    }}void CFraction::display(){    cout<<"("<<nume<<"/"<<deno<<")"<<endl;}//分数的加减乘除运算CFraction CFraction::operator+(const CFraction&c){    CFraction t;    t.nume=nume*c.deno+c.nume*deno;    t.deno=deno*c.deno;    t.simplify();    return t;}CFraction CFraction::operator-(const CFraction&c){    CFraction t;    t.nume=nume*c.deno-c.nume*deno;    t.deno=deno*c.deno;    t.simplify();    return t;}CFraction CFraction::operator*(const CFraction&c){    CFraction t;    t.nume=nume*c.nume;    t.deno=deno*c.deno;    t.simplify();    return t;}CFraction CFraction::operator/(const CFraction&c){    CFraction t;    t.nume=nume*c.deno;    t.deno=deno*c.nume;    t.simplify();    return t;}//六种关系的比较运算bool CFraction::operator>(const CFraction &c){    int this_nume,c_nume,common_deno;    this_nume=nume*c.deno;    c_nume=c.nume*deno;    common_deno=deno*c.deno;    if((this_nume-c_nume)*common_deno>0)        return true;    else        return false;}bool CFraction::operator<(const CFraction &c){    int this_nume,c_nume,common_deno;    this_nume=nume*c.deno;    c_nume=deno*c.nume;    common_deno=deno*c.deno;    if((this_nume-c_nume)*common_deno<0)        return true;    else        return false;}bool CFraction::operator==(const CFraction &c){    if(*this!=c)        return false;    else        return            true;}bool CFraction::operator!=(const CFraction &c){    if(*this>c||*this<c)        return true;    else        return false;}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;}int main(){    CFraction x(1,3),y(4,6),z;    cout<<"分数x=1/3,y=4/6"<<endl;    z=x+y;    cout<<"x+y=";    z.display();    z=x-y;    cout<<"x-y=";    z.display();    z=x*y;    cout<<"x*y=";    z.display();    z=x/y;    cout<<"x/y=";    z.display();    x.display();    if(x>y)        cout<<"大于"<<endl;    if(x<y)        cout<<"小于"<<endl;    if(x==y)        cout<<"等于"<<endl;    y.display();    cout<<endl;    return 0;}


运行结果:

学习心得:没有什么新的东西,只要记住头脑清新,一句一句的就写下去就对了。在这个问题中,在分数化简那一步我出现了问题,但最后还是解决了,很好。

0 0
原创粉丝点击