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

来源:互联网 发布:sql select 两个字段 编辑:程序博客网 时间:2024/05/18 01:48

  

/* *Copyright (c) 2014, 烟台大学计算机学院 *All rights reserved. *文件名称:week9-3-2.cpp *作者:高赞 *完成日期:2015年 5 月 5 日 *版本号:v1.2 * * 问题描述:定义分数类中<<和>>运算符重载,实现分数的输入输出 */#include <iostream>#include "CFraction.h"using namespace std;int main(){    CFraction f1(5,10),f2,f3;    cout<<"输入f2";    cin>>f2;    cout<<"f1="<<f1;    cout<<"f2="<<f2;    cout<<endl;    if (f1>f2) cout<<"f1 > f2"<<endl;    if (f1<f2) cout<<"f1 < f2"<<endl;    if (f1==f2) cout<<"f1 == f2"<<endl;    if (f1!=f2) cout<<"f1 != f2"<<endl;    if (f1>=f2) cout<<"f1 >= f2"<<endl;    if (f1<=f2) cout<<"f1 <= f2"<<endl;    cout<<endl;    f3=f1+f2;    cout<<"f1+f2="<<f3;    f3=f1-f2;    cout<<"f1-f2="<<f3;    f3=f1*f2;    cout<<"f1*f2="<<f3;    f3=f1/f2;    cout<<"f1/f2="<<f3;    f3=f1+2;    cout<<"f1+2="<<f3;    f3=f1-2;    cout<<"f1-2="<<f3;    f3=f1*2;    cout<<"f1*2="<<f3;    f3=f1/2;    cout<<"f1/2="<<f3;    f3=2+f2;    cout<<"2+f2="<<f3;    f3=2-f2;    cout<<"2-f2="<<f3;    f3=2*f2;    cout<<"2*f2="<<f3;    f3=2/f2;    cout<<"2/f2="<<f3;    f3=-f2;    cout<<"-f2="<<f3;    f3=+f2;    cout<<"+f2="<<f3;    f3=~f2;    cout<<"f2倒数:"<<f3;    return 0;}

CFraction.h

#ifndef CFRACTION_H_INCLUDED#define CFRACTION_H_INCLUDED#include <iostream>using namespace std;class CFraction{private:    int nume;  // 分子    int deno;  // 分母public:    CFraction(int nu=0,int de=1);    void simplify();            //化简(使分子分母没有公因子)    CFraction operator+(const CFraction &f2);    CFraction operator-(const CFraction &f2);    CFraction operator*(const CFraction &f2);    CFraction operator/(const CFraction &f2);    CFraction operator+(const int i);    CFraction operator-(const int i);    CFraction operator*(const int i);    CFraction operator/(const int i);    CFraction operator+();    CFraction operator-();    CFraction operator~();    bool operator > (const CFraction &f2);    bool operator < (const CFraction &f2);    bool operator >= (const CFraction &f2);    bool operator <= (const CFraction &f2);    bool operator == (const CFraction &f2);    bool operator != (const CFraction &f2);    friend CFraction operator+(const int i,const CFraction &f2);    friend CFraction operator-(const int i,const CFraction &f2);    friend CFraction operator*(const int i,const CFraction &f2);    friend CFraction operator/(const int i,const CFraction &f2);    friend istream &operator>>(istream &,CFraction &);    friend ostream &operator<<(ostream &,CFraction &);};#endif // CFRACTION_H_INCLUDED

CFraction,cpp

#include "CFraction.h"#include <iostream>#include <cstdlib>using namespace std;CFraction::CFraction(int nu,int de){    if(de==0)    {        cout<<"初始化失败,分母不能为零。"<<endl;        exit(0);    }    else    {        nume=nu;        deno=de;    }}void CFraction::simplify(){    int a=nume,b=deno,c;    while (b!=0)    {        c=a%b;        a=b;        b=c;    }    nume=nume/a;    deno=deno/a;    if((nume>0&&deno<0))    {        nume*=(-1);        deno*=(-1);    }    if(nume<0&&deno<0)    {        nume*=(-1);        deno*=(-1);    }}CFraction CFraction::operator+(const CFraction &f2){    return CFraction(nume*f2.deno+f2.nume*deno,deno*f2.deno);}CFraction CFraction::operator-(const CFraction &f2){    return CFraction(nume*f2.deno-f2.nume*deno,deno*f2.deno);}CFraction CFraction::operator*(const CFraction &f2){    return CFraction(nume*f2.nume,deno*f2.deno);}CFraction CFraction::operator/(const CFraction &f2){    return CFraction(nume*f2.deno,deno*f2.nume);}CFraction CFraction::operator+(const int i){    CFraction f1(i,1);    return *this+f1;}CFraction CFraction::operator-(const int i){    CFraction f1(i,1);    return *this-f1;}CFraction CFraction::operator*(const int i){    CFraction f1(i,1);    return *this*f1;}CFraction CFraction::operator/(const int i){    CFraction f1(i,1);    return *this/f1;}CFraction operator+(const int i,const CFraction &f2){    CFraction f1(i,1);    return f1+f2;}CFraction operator-(const int i,const CFraction &f2){    CFraction f1(i,1);    return f1-f2;}CFraction operator*(const int i,const CFraction &f2){    CFraction f1(i,1);    return f1*f2;}CFraction operator/(const int i,const CFraction &f2){    CFraction f1(i,1);    return f1/f2;}bool CFraction::operator > (const CFraction &f2){    if(nume*f2.deno>f2.nume*deno)        return true;    else return false;}bool CFraction::operator < (const CFraction &f2){    if(nume*f2.deno<f2.nume*deno)        return true;    else return false;}bool CFraction::operator >= (const CFraction &f2){    if(nume*f2.deno<f2.nume*deno)        return false;    else return true;}bool CFraction::operator <= (const CFraction &f2){    if(nume*f2.deno>f2.nume*deno)        return false;    else return true;}bool CFraction::operator == (const CFraction &f2){    if(nume*f2.deno==f2.nume*deno)        return true;    else return false;}bool CFraction::operator != (const CFraction &f2){    if(nume*f2.deno==f2.nume*deno)        return false;    else return true;}CFraction CFraction::operator+(){    return *this;}CFraction CFraction::operator-(){    CFraction x;    x.nume=-nume;    x.deno=deno;    return x;}CFraction CFraction::operator~(){    CFraction x;    x.nume=deno;    x.deno=nume;    x.simplify();    return x;}istream &operator>>(istream &input,CFraction &f){    cout<<"分子和分母:";    input>>f.nume>>f.deno;    while(f.deno==0)    {        cout<<"分母不能为零,重新输入分母:";        input>>f.deno;    }    return input;}ostream &operator<<(ostream &output,CFraction &f){    f.simplify();    if(f.deno==1)        output<<f.nume<<endl;    else        output<<f.nume<<"/"<<f.deno<<endl;    return output;}




0 0
原创粉丝点击