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

来源:互联网 发布:双网卡路由器共享网络 编辑:程序博客网 时间:2024/05/18 02:50
/** 程序的版权和版本声明部分:* Copyright (c) 2013.烟台大学计算机学院。* All rights reserved.* 文件名称:分数类中的运算符重载* 作    者:冯冬影* 完成日期:2014 年 4月 22日* 版 本 号:v1.0* 对任务及求解方法的描述部分:* 输入描述:* 问题描述:* 程序输出:*/#include <iostream>#include<Cmath>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);    //置值,改变值时用    CFraction  operator+(CFraction &c);    CFraction  operator-(CFraction &c);    CFraction operator*(CFraction &c);    CFraction operator/(CFraction &c);    friend CFraction operator+(CFraction &c);//取正    friend CFraction operator-(CFraction &c);//取反    friend CFraction operator~(CFraction &c);//求倒数    friend ostream&operator<<(ostream&,CFraction &);    friend istream&operator>>(istream&,CFraction &);};ostream&operator<<(ostream &output,CFraction &c){    CFraction c1;    int t,r,a,b;    a=c.nume;    b=c.deno;    if(a<b)    {        t=a;        a=b;        b=t;    }    while (b!=0)    {        r=a%b;        a=b;        b=r;    }    c1.nume=c.nume/a;    c1.deno=c.deno/a;    if(c.deno==1)        output<<c1.nume<<endl;    else        output<<c1.nume<<"/"<<c1.deno<<endl;    return output;}istream&operator>>(istream &input,CFraction &c){    int nu,de;    char k;    input>>nu>>k>>de;    c.nume=nu;    c.deno=de;    return input;}CFraction operator+(CFraction &c){    CFraction c1;    if(c.deno<0)        c1.deno=-c.deno;    else c1.deno=c.deno;    if(c.nume<0)        c1.nume=-c.nume;    else c1.nume=c.nume;    return c1;}CFraction operator-(CFraction &c){    CFraction c1;    if(c.nume*c.deno>0)    {        c1.nume=-c.nume;        c1.deno=c.deno;    }    else    {        c1.deno=c.deno;        c1.nume=c.nume;    }    return c1;}CFraction operator~(CFraction &c){    CFraction c1;    c1.nume=c.deno;    c1.deno=c.nume;    return c1;}void CFraction::set(int nu,int de){    if(de!=0)    {        nume=nu;        deno=de;    }}CFraction::CFraction(int nu,int de){    if(de!=0)    {        nume=nu;        deno=de;    }    else        cout<<"初始化错误,请重新初始化!";}CFraction CFraction::operator+(CFraction &c){    int n,d;    n=nume*c.deno+deno*c.nume;    d=deno*c.deno;    CFraction c3(n,d);    return c3;}CFraction CFraction::operator-(CFraction &c){    int n,d;    n=nume*c.deno-deno*c.nume;    d=deno*c.deno;    CFraction c3(n,d);    return c3;}CFraction CFraction::operator*(CFraction &c){    int n,d;    n=nume*c.nume;    d=deno*c.deno;    CFraction c3(n,d);    return c3;}CFraction CFraction::operator/(CFraction &c){    int n,d;    n=nume*c.deno;    d=deno*c.nume;    CFraction c3(n,d);    return c3;}int main(){    CFraction c1,c2,c;    cout<<"请输入第一个分数(按照n/m的格式):";    cin>>c1;    cout<<"请输入第二个分数(按照n/m的格式):";    cin>>c2;    c=c1+c2;    cout<<"c1+c2=";    cout<<c;    c=c1-c2;    cout<<"c1-c2=";    cout<<c;    c=c1*c2;    cout<<"c1*c2=";    cout<<c;    c=c1/c2;    cout<<"c1/c2=";    cout<<c;    CFraction C(5,-8);    cout<<"C=";    cout<<C;    cout<<"C取正:";    c=(+C);    cout<<c;    cout<<"C取反:";    c=(-C);    cout<<c;    cout<<"C取倒数:";    c=(~C);    cout<<c;    return 0;}

运行结果
0 0