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

来源:互联网 发布:广东进出口数据 编辑:程序博客网 时间:2024/05/21 10:31

实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。可以在第4周分数类代码的基础上开始工作。


/** Copyright (c) 2015,烟台大学计算机学院* All right reserved.* 作者:赵嵩* 文件:Demo.cpp* 完成时间:2015年05月16日* 版本号:v1.0*/#include <iostream>using namespace std;class CFraction{private:    int nume;  // 分子    int deno;  // 分母public:    //构造函数及运算符重载的函数声明    CFraction(int n=1,int d=1);    CFraction operator+(CFraction &d);    CFraction operator-(CFraction &d);    CFraction operator*(CFraction &d);    CFraction operator/(CFraction &d);    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 setCFraction(int n,int d);    void display();    void simplify();};int gcd(int m, int n);//重载函数的实现及用于测试的main()函数CFraction :: CFraction(int n,int d){    nume=n;    deno=d;}void CFraction::setCFraction(int n, int d){    nume=n;    deno=d;}void CFraction::display(){    cout<<nume<<"/"<<deno<<endl;}void CFraction::simplify()//化简{    int n=gcd(deno, nume);    deno/=n;    nume/=n;}int gcd(int m, int n) //求最大公约数{    int r;    if (m<n)    {        r=m;        m=n;        n=r;    }    while(r=m%n)    {        m=n;        n=r;    }    return n;}CFraction CFraction::operator+(CFraction &d){    CFraction m;    m.nume=nume*d.deno+d.nume*deno;    m.deno=deno*d.deno;    m.simplify();    return m;}CFraction CFraction::operator-(CFraction &d){    CFraction m;    m.nume=nume*d.deno-d.nume*deno;    m.deno=deno*d.deno;    m.simplify();    return m;}CFraction CFraction::operator*(CFraction &d){    CFraction m;    m.nume=nume*d.nume;    m.deno=deno*d.deno;    m.simplify();    return m;}CFraction CFraction::operator/(CFraction &d){    CFraction m;    m.nume=nume*d.deno;    m.deno=deno*d.nume;    m.simplify();    return m;}bool CFraction::operator>(const CFraction &c){    int anume1,anume2,both;    both=this->deno*c.deno;    anume1=nume*c.deno;    anume2=c.nume*deno;    if ((anume1>anume2&&both>0)||(anume1<anume2&&both<0)) return true;    return false;}bool CFraction::operator<(const CFraction &c){    int anume1,anume2,both;    both=this->deno*c.deno;    anume1=nume*c.deno;    anume2=c.nume*deno;    if ((anume1-anume2)*both<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) return false;    return true;}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;}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();    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
原创粉丝点击