第九周 项目3 (1)

来源:互联网 发布:九月海子知乎 编辑:程序博客网 时间:2024/05/06 19:27
<span style="font-family:Microsoft YaHei;font-size:18px;color:#000099;">/**Copyright (c)2014,烟台大学计算机与控制工程学院*All rights reserved.*dood luck*文件名称:d.cpp*作    者:张旺华*完成日期:2015年5月16日*版 本 号:v1.0**/#include <iostream>using namespace std;class CFraction{private:    int nume;  // 分子    int deno;  // 分母public:    //构造函数及运算符重载的函数声明    CFraction(int n=1,int d=1);    void setCFraction(int n,int d);    void display();    CFraction operator+();    CFraction operator-();    CFraction operator~();    friend CFraction change(CFraction &c);    CFraction operator+(CFraction &c);    CFraction operator-(CFraction &c);    CFraction operator*(CFraction &c);    CFraction operator/(CFraction &c);    bool operator > (CFraction &t);    bool operator < (CFraction &t);    bool operator >= (CFraction &t);    bool operator <= (CFraction &t);    bool operator == (CFraction &t);    bool operator != (CFraction &t);    //赋值运算符的重载    CFraction operator+=(CFraction &c);    CFraction operator-=(CFraction &c);    CFraction operator*=(CFraction &c);    CFraction operator/=(CFraction &c);};int gcd(int a,int b){    return a%b==0?b:gcd(b,a%b);}CFraction::CFraction(int n,int d){    nume=n;    deno=d;}CFraction CFraction::operator+(){    return *this;}CFraction CFraction::operator-(){    CFraction x;    x.nume=-nume;    x.deno=deno;    return x;    return *this;}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;}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+(CFraction &c){    CFraction p;    p.nume=nume*c.deno+deno*c.nume;    p.deno=deno*c.deno;    return change(p);}CFraction CFraction::operator-(CFraction &c){    CFraction p;    p.nume=nume*c.deno-deno*c.nume;    p.deno=deno*c.deno;    return change(p);}CFraction CFraction::operator*(CFraction &c){    CFraction p;    p.nume=nume*c.nume;    p.deno=deno*c.deno;    return change(p);}CFraction CFraction::operator/(CFraction &c){    CFraction p;    p.nume=nume*c.deno;    p.deno=deno*c.nume;    return change(p);}bool CFraction::operator > (CFraction &t){    return (nume*t.deno>t.nume*deno);}bool CFraction::operator < (CFraction &t){    return (nume*t.deno<t.nume*deno);}bool CFraction::operator >= (CFraction &t){    return !(nume*t.deno<t.nume*deno);}bool CFraction::operator <= (CFraction &t){    return !(nume*t.deno>t.nume*deno);}bool CFraction::operator == (CFraction &t){    return !(nume*t.deno>t.nume*deno||nume*t.deno<t.nume*deno);}bool CFraction::operator != (CFraction &t){    return (nume*t.deno>t.nume*deno||nume*t.deno<t.nume*deno);}//赋值运算符的重载CFraction CFraction::operator+=(CFraction &c){    nume=nume*c.deno+deno*c.nume;    deno=deno*c.deno;    return change(*this);}CFraction CFraction::operator-=(CFraction &c){    nume=nume*c.deno-deno*c.nume;    deno=deno*c.deno;    return change(*this);}CFraction CFraction::operator*=(CFraction &c){    nume=nume*c.nume;    deno=deno*c.deno;    return change(*this);}CFraction CFraction::operator/=(CFraction &c){    nume=nume*c.deno;    deno=deno*c.nume;    return change(*this);}int main(){    CFraction t1(7,9),t2;    t2=+t1;    t2.display();    t2=-t1;    t2.display();    t2=~t1;    t2.display();    return 0;}</span>

运行结果:


学习心得:

没有考虑到倒数分母为零何为负数的情况;

0 0