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

来源:互联网 发布:win7桌面日程安排软件 编辑:程序博客网 时间:2024/06/06 09:35
/*   *Copyright (c) 2014, 烟台大学计算机学院   *All rights reserved.   *文件名称:week8-3-2.cpp   *作者:高赞   *完成日期:2015年 4 月 27 日   *版本号:v1.0   *   * 问题描述:分数的加减乘除和比较以及和整型数据的运算 */ #include <iostream>#include "CFraction.h"using namespace std;int main(){    CFraction f1(5,10),f2(2,5),f3;    cout<<"f1=";    f1.simplify();    f1.display();    cout<<"f2=";    f2.simplify();    f2.display();    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;    f3=f1+f2;    f3.simplify();    cout<<"f1+f2=";    f3.display();    f3=f1-f2;    f3.simplify();    cout<<"f1-f2=";    f3.display();    f3=f1*f2;    f3.simplify();    cout<<"f1*f2=";    f3.display();    f3=f1/f2;    f3.simplify();    cout<<"f1/f2=";    f3.display();    f3=f1+2;    f3.simplify();    cout<<"f1+2=";    f3.display();    f3=f1-2;    f3.simplify();    cout<<"f1-2=";    f3.display();    f3=f1*2;    f3.simplify();    cout<<"f1*2=";    f3.display();    f3=f1/2;    f3.simplify();    cout<<"f1/2=";    f3.display();    f3=2+f2;    f3.simplify();    cout<<"2+f2=";    f3.display();    f3=2-f2;    f3.simplify();    cout<<"2-f2=";    f3.display();    f3=2*f2;    f3.simplify();    cout<<"2*f2=";    f3.display();    f3=2/f2;    f3.simplify();    cout<<"2/f2=";    f3.display();    return 0;}


CFraction类

#ifndef CFRACTION_H_INCLUDED#define CFRACTION_H_INCLUDEDclass 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);    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);    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);    void display();};#endif // CFRACTION_H_INCLUDED


定义成员函数和友元函数

#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);    }}void CFraction::display(){    if(deno==1)        cout<<nume<<endl;    else    cout<<nume<<"/"<<deno<<endl;}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;}


 

 

分数的简化也要考虑到负号的前置和抵消以及分母为1时的省略。

0 0