第八周 项目3-分数类中的运算符重载(1)加减乘除和6种比较关系

来源:互联网 发布:传智播客php就业班 编辑:程序博客网 时间:2024/06/05 19:14

 

 /* *Copyright (c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:time.cpp *作者:刘天恩 *完成时间:2015年5月13号 *版本号:v1.0 *问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算 *输入描述:无 *程序输出:输出两个分数加减乘除的结果,比较运算的结果 */#include <iostream>#include<cmath>using namespace std;class CFraction{private:    int nume;  // 分子    int deno;  // 分母public:    //构造函数及运算符重载的函数声明    CFraction(int n=0,int d=1):nume(n),deno(d){}    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);};//重载函数的实现及用于测试的main()函数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.deno=deno*c.deno;    t.nume=nume*c.nume;    t.simplify();    return t;}CFraction CFraction::operator/(const CFraction &c){    CFraction t;    if (!c.nume)        return *this;    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)||(this_nume<c_nume&&common_deno<0))        return true;    return false;}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;    return false;}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;}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;}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();    cout<<"x-y=";    s=x-y;    s.display();    cout<<"x*y=";    s=x*y;    s.display();    cout<<"x/y=";    s=x/y;    s.display();    if(x>y) cout<<"大于"<<endl;    if(x<y) cout<<"小于"<<endl;    if(x==y) cout<<"等于"<<endl;    return 0;}


运算结果:

0 0
原创粉丝点击