第七周项目3-分数类中的运算符重载

来源:互联网 发布:mg动画用什么软件 编辑:程序博客网 时间:2024/05/22 11:00
#include <iostream>using namespace std;class CFraction{private:    int nume;  // 分子    int deno;  // 分母public:    CFraction(int nu=0,int de=1);   //构造函数,初始化用    void set(int nu=0,int de=1); //置值,改变值时用    void input();               //按照"nu/de"的格式,如"5/2"的形式输入    void simplify();//化简(使分子分母没有公因子)    void display();    int gcd(int d,int n);    CFraction operator+(const CFraction &c);  //两个分数相加,结果要化简    CFraction operator-(const CFraction &c);  //两个分数相减,结果要化简    CFraction operator*(const CFraction &c);  //两个分数相乘,结果要化简    CFraction 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);    bool operator<=(const CFraction &c);};CFraction::CFraction(int nu,int de){    if(de!=0)    {        nume=nu;        deno=de;    }}void CFraction::set(int nu,int de){    if(de!=0)    {        nume=nu;        deno=de;    }}void CFraction::input(){    int nu,de;    char c;    while(1)    {        cin>>nu>>c>>de;        if(c!='/')            cout<<"输入格式错误"<<endl;        else if(de==0)            cout<<"分母不能为0"<<endl;        else            break;    }}void CFraction::simplify(){    int n=gcd(deno,nume);    deno/=n;    nume/=n;}int CFraction::gcd(int d,int n){    int t;    if (n>d)    {        t=d;        d=n;        n=t;    }    int r;    while(d!=0)    {        r=n%d;        n=d;        d=r;    }    return n;}void CFraction::display(){    cout<<nume<<'/'<<deno<<endl;;}CFraction CFraction::operator+(const CFraction &c){    CFraction c1;    c1.deno=c.deno*deno;    c1.nume=c.deno*nume+c.nume*deno;    c1.simplify();    return c1;}CFraction CFraction::operator-(const CFraction &c){    CFraction c1;    c1.deno=c.deno*deno;    c1.nume=c.deno*nume-c.nume*deno;    c1.simplify();    return c1;}CFraction CFraction::operator*(const CFraction &c){    CFraction c1;    c1.deno=c.deno*deno;    c1.nume=c.nume*nume;    c1.simplify();    return c1;}CFraction  CFraction::operator/(const CFraction &c){    CFraction c1;    c1.deno=deno*c.nume;    c1.nume=nume*c.deno;    c1.simplify();    return c1;}bool CFraction::operator<(const CFraction &c){    int nu1,nu2;    nu1=c.deno*nume;    nu2=deno*c.nume;    if(nu1<nu2)        return true;    return false;}bool CFraction::operator>(const CFraction &c){    int nu1,nu2;    nu1=c.deno*nume;    nu2=deno*c.nume;    if(nu1>nu2)        return true;    return false;}bool CFraction::operator==(const CFraction &c){    int nu1,nu2;    nu1=c.deno*nume;    nu2=deno*c.nume;    if(nu1==nu2)        return true;    return false;}bool CFraction::operator!=(const CFraction &c){    return !(*this==c);}bool CFraction::operator<=(const CFraction &c){    return !(*this>=c);}bool CFraction::operator>=(const CFraction &c){    return !(*this<c);}int main(){    CFraction c1(2,5),c2(3,4),c3;    c1.display();    c2.display();    if (c1>c2) cout<<"c1>c2"<<endl;    if (c1<c2) cout<<"c1<c2"<<endl;    if (c1==c2) cout<<"c1=c2"<<endl;    if (c1!=c2) cout<<"c1≠c2"<<endl;    if (c1>=c2) cout<<"c1≥c2"<<endl;    if (c1<=c2) cout<<"c1≤c2"<<endl;    c3=c1+c2;    cout<<"c1+c2=";    c3.display();    c3=c1-c2;    cout<<"c1-c2=";    c3.display();    c3=c1*c2;    cout<<"c1*c2=";    c3.display();    c3=c1/c2;    cout<<"c1/c2=";    c3.display();}


 

 

 

 

 

 

0 0