第8周项目3-分数类的运算符重载(续)

来源:互联网 发布:旅游网站实时数据来源 编辑:程序博客网 时间:2024/05/16 05:27
/**copyright (c)2015,烟台大学计算机学院*All rights reserved*文件名称:project.cpp*作者:孙春红*完成日期:2015年5月12日*版本号:v1.0**问题描述:在第8周项目3基础上(1)定义分数的一目运算+和-,分别代表分数取正和求反,将“按位取反运算符”~重载为分数的求倒数运算。(2)定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。。*输入描述:略。*程序输出:略。*/#include<iostream>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 ostream& operator <<(ostream& cout,CFraction&c);    friend istream& operator >>(istream& cin ,CFraction&c);    friend bool operator > (CFraction &c1,CFraction &c2);    friend bool operator < (CFraction &c1,CFraction &c2);    friend bool operator >=(CFraction &c1,CFraction &c2);    friend bool operator <=(CFraction &c1,CFraction &c2);    friend bool operator ==(CFraction &c1,CFraction &c2);    friend bool operator !=(CFraction &c1,CFraction &c2);    friend CFraction operator +(CFraction &c1,CFraction &c2);    friend CFraction operator -(CFraction &c1,CFraction &c2);    friend CFraction operator *(CFraction &c1,CFraction &c2);    friend CFraction operator /(CFraction &c1,CFraction &c2);    CFraction operator +();    CFraction operator -();    CFraction operator ~();};//重载函数的实现void CFraction::simplify(){    int r,m,n;     m=deno;     n=nume;    while(r=m%n)  // 求m,n的最大公约数    {        m=n;        n=r;    }    deno/=n;    nume/=n;}bool operator > (CFraction &c1,CFraction &c2){    if ((c1.nume*c2.deno)>(c2.nume*c1.deno))        return true;    return false;}bool operator < (CFraction &c1,CFraction &c2){    if ((c1.nume*c2.deno)<(c2.nume*c1.deno))        return true;    return false;}bool operator >=(CFraction &c1,CFraction &c2){    if (c1<c2)        return false;    return true;}bool operator <=(CFraction &c1,CFraction &c2){    if (c1>c2)        return false;    return true;}bool operator ==(CFraction &c1,CFraction &c2){    if ((c1<c2)||(c1>c2))        return false;    return true;}bool operator !=(CFraction &c1,CFraction &c2){    if (c1==c2)        return false;    return true;}CFraction operator +(CFraction &c1,CFraction &c2){    CFraction c;    c.deno=c1.deno*c2.deno;    c.nume=c1.nume*c2.deno+c2.nume*c1.deno;    c.simplify();    return c;}CFraction operator -(CFraction &c1,CFraction &c2){    CFraction c;    c.deno=c1.deno*c2.deno;    c.nume=c1.nume*c2.deno-c2.nume*c1.deno;    c.simplify();    return c;}CFraction operator *(CFraction &c1,CFraction &c2){    CFraction c;    c.deno=c1.deno*c2.deno;    c.nume=c1.nume*c2.nume;    c.simplify();    return c;}CFraction operator /(CFraction &c1,CFraction &c2){    CFraction c;    c.deno=c1.deno*c2.nume;    c.nume=c1.nume*c2.deno;    c.simplify();    return c;}CFraction CFraction::operator +(){CFraction c;    if (nume<0)    {        c.nume=-nume;    }    if (deno<0)    {        c.deno=-deno;    }    return c;}CFraction CFraction::operator -(){    CFraction c;    c.nume=-nume;    c.deno=deno;    return c;}CFraction CFraction::operator~(){    CFraction c;    c.nume=deno;    c.deno=nume;    if(c.deno<0)    {        c.deno=-c.deno;        c.nume=-c.nume;    }    return c;}ostream& operator <<(ostream& cout,CFraction&c){    cout<<"("<<c.nume<<"/"<<c.deno<<")"<<endl;    return cout;}istream& operator >>(istream& cin ,CFraction&c){   cin>>c.nume>>c.deno;   return cin;}int main(){    CFraction x,y,s;    cout<<"输入x: ";    cin>>x;    cout<<"输入y: ";    cin>>y;    s=x+y;    cout<<"x+y="<<s;    s=x-y;    cout<<"x-y="<<s;    s=x*y;    cout<<"x*y="<<s;    s=x/y;    cout<<"x/y="<<s;    s=-x;    cout<<"-x="<<s;    s=+x;    cout<<"+x="<<s;    s=~x;    cout<<"x的倒数: "<<s;    cout<<"x是:"<<x;    cout<<"y是:"<<y;    if (x>y) cout<<"大于";    if (x<y) cout<<"小于";    if (x==y) cout<<"等于";    return 0;}


运行结果:

知识点总结:

学会定义单目运算符以及输入输出的运算符

0 0
原创粉丝点击