码迷,mamicode.com
首页 > 其他好文 > 详细

第八周项目 三 (2) 终于完成了

时间:2015-05-08 16:30:18      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:namespace   iostream   class      c++   

要求:

(2)在(1)的基础上,实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。例如:CFraction a(1,3),b; int i=2; 可以完成b=a+i;。同样,可以完成i+a, 45+a, a*27, 5/a等各种运算。

/*
*Copyright (c)2014,烟台大学计算机与控制工程学院
*All rights reserved.
*dood luck
*文件名称:d.cpp
*作    者:张旺华
*完成日期:2015年5月7日
*版 本 号:v1.0
*
*/
#include <iostream>
using namespace std;
class CFraction
{
private:
    int nume;  // 分子
    int deno;  // 分母
public:
    //构造函数及运算符重载的函数声明
    CFraction(int n=0,int d=1):nume(n),deno(d) {};
    void setCFraction(int n,int d);
    void display();
    CFraction operator+();  //取正一目运算
    CFraction operator-();  //取反一目运算
    friend CFraction change(CFraction &c);
    friend CFraction operator+(const CFraction &c1, const CFraction &c2);
    friend CFraction operator-(const CFraction &c1, const CFraction &c2);
    friend CFraction operator*(const CFraction &c1, const CFraction &c2);
    friend CFraction operator/(const CFraction &c1, const CFraction &c2);

    friend CFraction operator+(const int &a, const CFraction &c2);
    friend CFraction operator-(const int &a, const CFraction &c2);
    friend CFraction operator*(const int &a, const CFraction &c2);
    friend CFraction operator/(const int &a, const CFraction &c2);
    friend CFraction operator+(const CFraction &c1, const int &a);
    friend CFraction operator-(const CFraction &c1, const int &a);
    friend CFraction operator*(const CFraction &c1, const int &a);
    friend CFraction operator/(const CFraction &c1, const int &a);

    friend  CFraction operator+=( CFraction &c1, const CFraction &c2);
    friend CFraction operator-=( CFraction &c1, const CFraction &c2);
    friend CFraction operator*=( CFraction &c1, const CFraction &c2);
    friend CFraction operator/=( CFraction &c1, const CFraction &c2);


    friend bool operator > (CFraction &t,CFraction &c);
    friend bool operator < (CFraction &t,CFraction &c);
    friend bool operator >= (CFraction &t,CFraction &c);
    friend bool operator <= (CFraction &t,CFraction &c);
    friend bool operator == (CFraction &t,CFraction &c);
    friend bool operator != (CFraction &t,CFraction &c);
    //赋值运算符的重载
    friend bool operator > (const int &a, const CFraction &c);
    friend bool operator < (const int &a, const CFraction &c);
    friend bool operator >= (const int &a, const CFraction &c);
    friend bool operator <= (const int &a, const CFraction &c);
    friend bool operator == (const int &a, const CFraction &c);
    friend bool operator != (const int &a, const CFraction &c);

    friend bool operator > ( const CFraction &c,const int &a);
    friend bool operator < (const CFraction &c,const int &a);
    friend bool operator >= (const CFraction &c,const int &a);
    friend bool operator <= (const CFraction &c,const int &a);
    friend bool operator == (const CFraction &c,const int &a);
    friend bool operator != (const CFraction &c,const int &a);

};
int gcd(int a,int b)
{
    return a%b==0?b:gcd(b,a%b);
}
void CFraction::setCFraction(int n,int d)
{
    nume=n;
    deno=d;
}
CFraction change(CFraction &c)
{
    int t,a,b;
    a=c.nume;
    b=c.deno;
    t=gcd(a,b);
    c.nume/=t;
    c.deno/=t;
    return c;
}
void CFraction::display()
{
    if(nume!=0&&deno!=0)
        cout<<nume<<"/"<<deno<<endl;
    else if(nume==0&&deno!=0)
        cout<<"0"<<endl;
    else
        cout<<"error"<<endl;

}

CFraction CFraction ::operator+() //取正一目运算
{
    return *this;
}
CFraction CFraction ::operator-() //取反一目运算
{
    CFraction p(-this->nume,this->deno);
    return p;
}

CFraction operator+(const CFraction &c1, const CFraction &c)
{
    CFraction p;
    p.nume=c1.nume*c.deno+c1.deno*c.nume;
    p.deno=c1.deno*c.deno;
    return change(p);
}
CFraction operator-(const CFraction &c1, const CFraction &c)
{
    CFraction p;
    p.nume=c1.nume*c.deno-c1.deno*c.nume;
    p.deno=c1.deno*c.deno;
    return change(p);
}
CFraction operator*(const CFraction &c1, const CFraction &c)
{
    CFraction p;
    p.nume=c1.nume*c.nume;
    p.deno=c1.deno*c.deno;
    return change(p);
}
CFraction operator/(const CFraction &c1, const CFraction &c)
{
    CFraction p;
    p.nume=c1.nume*c.deno;
    p.deno=c1.deno*c.nume;
    return change(p);
}

CFraction operator+(const int &a, const CFraction &c2)
{
    CFraction p(a,1);
    return p+c2;
}
CFraction operator-(const int &a, const CFraction &c2)
{
    CFraction p(a,1);
    return p-c2;
}
CFraction operator*(const int &a, const CFraction &c2)
{
    CFraction p(a,1);
    return p*c2;
}
CFraction operator/(const int &a, const CFraction &c2)
{
    CFraction p(a,1);
    return p/c2;
}
CFraction operator+(const CFraction &c1, const int &a)
{
    CFraction p(a,1);
    return c1+p;
}
CFraction operator-(const CFraction &c1, const int &a)
{
    CFraction p(a,1);
    return c1-p;
}
CFraction operator*(const CFraction &c1, const int &a)
{
    CFraction p(a,1);
    return c1*p;
}
CFraction operator/(const CFraction &c1, const int &a)
{
    CFraction p(a,1);
    return c1/p;
}

bool operator > (CFraction &t,CFraction &c)
{
    return (t.nume*c.deno>t.nume*c.deno);
}
bool operator < (CFraction &t,CFraction &c)
{
    return (t.nume*c.deno<t.nume*c.deno);
}
bool operator >= (CFraction &t,CFraction &c)
{
    return !(t.nume*c.deno<t.nume*c.deno);
}
bool operator <= (CFraction &t,CFraction &c)
{
    return !(t.nume*c.deno>t.nume*c.deno);
}
bool operator == (CFraction &t,CFraction &c)
{
    return !(t>c||t<c);
}
bool operator != (CFraction &t,CFraction &c)
{
    return (t>c||t<c);
}

bool operator > (const int &a, const CFraction &c)
{
    return (a*c.deno)>c.nume;
}
bool operator< (const int &a, const CFraction &c)
{
    return (a*c.deno)<c.nume;
}
bool operator >= (const int &a, const CFraction &c)
{
    return (a*c.deno)>=c.nume;
}

bool operator <= (const int &a, const CFraction &c)
{
    return (a*c.deno)<=c.nume;
}

bool operator == (const int &a, const CFraction &c)
{
    return (a*c.deno)==c.nume;
}

bool operator != (const int &a, const CFraction &c)
{
    return (a*c.deno)!=c.nume;
}


bool operator > ( const CFraction &c,const int &a)
{
    return c.nume>(a*c.deno);
}

bool operator < (const CFraction &c,const int &a)
{
    return c.nume<(a*c.deno);
}

bool operator >= (const CFraction &c,const int &a)
{
    return c.nume>=(a*c.deno);
}

bool operator <= (const CFraction &c,const int &a)
{
    return c.nume<=(a*c.deno);
}

bool operator == (const CFraction &c,const int &a)
{
    return c.nume==(a*c.deno);
}

bool operator != (const CFraction &c,const int &a)
{
    return c.nume!=(a*c.deno);
}


//赋值运算符的重载
CFraction operator+=( CFraction &c1, const CFraction &c)
{
    c1.nume=c1.nume*c.deno+c1.deno*c.nume;
    c1.deno=c1.deno*c.deno;
    return change(c1);
}
CFraction operator-=( CFraction &c1, const CFraction &c)
{
    c1.nume=c1.nume*c.deno-c1.deno*c.nume;
    c1.deno=c1.deno*c.deno;
    return change(c1);
}
CFraction operator*=( CFraction &c1, const CFraction &c)
{
    c1.nume=c1.nume*c.nume;
    c1.deno=c1.deno*c.deno;
    return change(c1);
}
CFraction operator/=( CFraction &c1, const CFraction &c)
{
    c1.nume=c1.nume*c.deno;
    c1.deno=c1.deno*c.nume;
    return change(c1);
}
int main()
{
    CFraction t1(7,9),t2(11,9),t;
    cout<<"t1为:";
    t1.display();
    cout<<"t2为:";
    t2.display();
    cout<<"下面比较两个数大小:\n";
    if (t1>t2) cout<<"t1>t2"<<endl;
    if (t1<t2) cout<<"t1<t2"<<endl;
    if (t1==t2) cout<<"t1=t2"<<endl;
    if (t1!=t2) cout<<"t1≠t2"<<endl;
    if (t1>=t2) cout<<"t1≥t2"<<endl;
    if (t1<=t2) cout<<"t1≤t2"<<endl;

    t=t1+t2;
    t.display();
    t=t1-t2;
    t.display();
    t=t1*t2;
    t.display();
    t=t1/t2;
    t.display();
    t1+=t2;
    t1.display();
    t1-=t2;
    t1.display();
    t1*=t2;
    t1.display();
    t1/=t2;
    t1.display();
    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();
    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;

    CFraction c1(5,3),c2;
    //以下建议在调试环境中完成测试,
    c2=c1+5;
    c2=5+c1;

    c2=c1-5;
    c2=5-c1;

    c2=c1*5;
    c2=5*c1;

    c2=c1/5;
    c2=5/c1;

    bool b;

    b=(c1>2);
    b=(2>c1);


    return 0;
}

运行结果:

技术分享

技术分享

一直在尝试着用自己的方法去完成,一下午就为了做这个就这样过去了有点不甘心,但好久没有这样的感觉了,好爽!

第八周项目 三 (2) 终于完成了

标签:namespace   iostream   class      c++   

原文地址:http://blog.csdn.net/wh201458501106/article/details/45581515

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!