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

来源:互联网 发布:pdf文档剪切软件 编辑:程序博客网 时间:2024/05/22 19:27
/**Copyright (c)2014,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:test.cpp*作    者:徐洪祥*完成日期:2015年5月20日*版 本 号:v1.0** 问题描述:实现分数类中的对象和整型数的四则运算,且运算符合交换律,定义分数的一目运算+和 -,分别            代表分数取正和求反,将“按位取反运算符”~重载为分数的求倒数运算;定义分数类中<<和>>运算符重载,            实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。* 输入描述:* 程序输出:*/#include <iostream>#include <cmath>using namespace std;class CFraction{private:    int nume;    int deno;public:    CFraction(int nu=0,int de=1):nume(nu),deno(de) {}    void simplify();    friend istream &operator>>(istream &in,CFraction &x);    friend ostream &operator<<(ostream &out,CFraction x);    CFraction operator+(const CFraction &c);    CFraction operator-(const CFraction &c);    CFraction operator*(const CFraction &c);    CFraction operator/(const CFraction &c);    CFraction operator+();    CFraction operator-();    CFraction operator~();    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 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;    }}istream &operator>>(istream &in,CFraction &x){    char ch;    while(1)    {        cin>>x.nume>>ch>>x.deno;        if (x.deno==0)            cout<<"分母不能为0, 请重新输入\n";        else if(ch!='/')            cout<<"格式错误! 请重新输入\n";        else            break;    }    return cin;}ostream &operator<<(ostream &out,CFraction x){    cout<<x.nume<<'/'<<x.deno;    return cout;}CFraction CFraction::operator+(const CFraction &c){    CFraction t;    t.nume=nume*c.deno+deno*c.nume;    t.deno=deno*c.deno;    t.simplify();    return t;}CFraction CFraction::operator-(const CFraction &c){    CFraction t;    t.nume=nume*c.deno-deno*c.nume;    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;}CFraction CFraction:: operator+(){    return *this;}CFraction CFraction:: operator-(){    CFraction x;    x.nume=-nume;    x.deno=deno;    return x;}CFraction CFraction:: operator~(){    CFraction x;    x.nume=deno;    x.deno=nume;    if(x.deno<0)    {        x.deno=-x.deno;        x.nume=-x.nume;    }    return x;}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){    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!=0)        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||*this<c)        return true;    else        return false;}int main(){    CFraction x,y,z;    cout<<"x:";    cin>>x;    cout<<"y:";    cin>>y;    z=+x+y;    cout<<"x+y="<<z<<endl;    z=+x-y;    cout<<"x-y="<<z<<endl;    z=x*y;    cout<<"x*y="<<z<<endl;    z=x/y;    cout<<"x/y="<<z<<endl;    cout<<"-x="<<-x<<endl;    cout<<"+x="<<+x<<endl;    cout<<"x的倒数: "<<~x<<endl;    if(x>y)        cout<<"x>y"<<endl;    if(x<y)        cout<<"x<y"<<endl;    if(x==y)        cout<<"x=y"<<endl;    cout<<endl;    return 0;}


 

 

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小腿里面的筋疼怎么办 腿抽筋,第二天疼怎么办 脚肿了怎么办消肿止痛 颈椎压迫神经手麻怎么办 上课睡觉手麻了怎么办 睡觉手麻了之后怎么办 趴着睡觉会打嗝怎么办 蹲久了脚麻了怎么办 干活累的手麻怎么办 月子手麻怎么办小妙招 电脑检测不到u盘怎么办 跟老婆三观不合怎么办 和老公三观不合怎么办 逗比人生爱之病怎么办 u盘无法识别怎么办修复 睾丸撞击后肿了怎么办 小孩脸过敏肿了怎么办 眼角肿了怎么办才能消肿 憋尿导致小腹痛怎么办 蛋蛋撞到了很疼怎么办 睾丸被压了好痛怎么办 睾丸皮肤痒破了怎么办 鸡儿下面了蛋痒怎么办? 射精后小腹胀该怎么办 手压伤了有淤血怎么办 手挤压伤了肿了怎么办 手被挤压肿了怎么办 手砸伤了肿了怎么办 手被机器压伤了怎么办 上眼皮眼睛肿了怎么办 上眼皮内有淤血怎么办 种睫毛眼睛红痛怎么办 一只眼睛变红了怎么办 黑眼球缺了一角怎么办 眼镜度数配高了怎么办 孩子近视800度可怎么办 儿童眼睛近视怎么办才能恢复正常 小孩眼睛近视怎么办才能恢复正常 3岁宝宝近视怎么办啊 6个月婴儿近视怎么办 近视眼的人老了怎么办