9-3分数类 运算符重载

来源:互联网 发布:淘宝客服权重分流 编辑:程序博客网 时间:2024/06/06 08:38

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称: 分数类中的运算符重载 
* 作 者: 张传新 
* 完成日期: 2012 年 04 月 14 日
* 版 本 号: V.1.0

* 对任务及求解方法的描述部分
* 问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的

* 加减乘除(运算后再化简)、求反、比较(6种关系)的运算。

* 程序头部的注释结束

#include<iostream>   using namespace std;    class CFraction  {  private:      int nume;  // 分子       int deno;  // 分母   public:      CFraction(int nu = 1,int de = 2);   //构造函数,初始化用       friend istream& operator >> (istream&,CFraction&);//声明重载运算符“>>”函数   friend ostream& operator << (ostream&,CFraction&);//声明重载运算符“<<”函数    void Simplify();                //化简(使分子分母没有公因子)       void S_Simplify();              //化简(以4/3为例,输出1(1/3),表示一又三分之一)       void output(int style);         //输出:以8/6为例,style为0时,输出8/6;                                       //style为1时,输出4/3;                                       //style为2时,输出1(1/3),表示一又三分之一;                                       //不给出参数和非1、2,认为是方式0         CFraction operator+(CFraction &CF2); //定义分数加法       CFraction operator-(CFraction &CF2); //定义分数减法       CFraction operator*(CFraction &CF2); //定义分数乘法       CFraction operator/(CFraction &CF2); //定义分数除法         CFraction operator-();//取反         //比较大小       bool operator > (CFraction &CF2);      bool operator < (CFraction &CF2);      bool operator >= (CFraction &CF2);      bool operator <= (CFraction &CF2);      bool operator == (CFraction &CF2);      bool operator != (CFraction &CF2);  };    //构造函数,初始化用   CFraction::CFraction(int nu,int de)  {      nume = nu;      deno = de;  }    //输出分数   ostream& operator << (ostream& output,CFraction& CF){      cout << CF.nume << "/" << CF.deno;return output;}    //按照"nu/de"的格式,如"5/2"的形式输入   istream& operator >> (istream& input,CFraction& CF){      char b;      cout << "请输入分数(按照“a/b”形式输入):" << endl;      input >> CF.nume >> b >> CF.deno;  return input;}    //化简(使分子分母没有公因子)   void CFraction::Simplify()  {      for(int i = 2;i <= nume && i <= deno;i++)      {          if(nume % i == 0 && deno % i == 0)          {              nume = nume/i;              deno = deno/i;              i--;          }      }        cout << (*this) << endl;  }    //化简(以4/3为例,输出1(1/3),表示一又三分之一)   void CFraction::S_Simplify()  {      for(int i = 2;i <= nume && i <= deno;i++)      {          if(nume % i == 0 && deno % i == 0)          {              nume = nume/i;              deno = deno/i;              i--;          }      }        if(nume >= deno)      {          int n;            n = nume / deno;          nume = nume % deno;          cout << n << "(" << (*this) << ")" << endl;      }      else      {          cout << (*this);      }    }  //输出:以8/6为例,style为0时,输出8/6;   //style为1时,输出4/3;   //style为2时,输出1(1/3),表示一又三分之一;   //不给出参数和非1、2,认为是方式0   void CFraction::output(int style)  {      if(style == 1)      {          CFraction::Simplify();      }      else if(style == 2)      {          CFraction::S_Simplify();      }      else      {          cout << (*this) << endl;      }  }    //定义分数加法   CFraction CFraction::operator+(CFraction &CF2)  {      nume = nume * CF2.deno + CF2.nume * deno;      deno = deno * CF2.deno;      return (*this);  }    //定义分数减法   CFraction CFraction::operator-(CFraction &CF2)  {      nume = nume * CF2.deno - CF2.nume * deno;      deno = deno * CF2.deno;      return (*this);  }    //定义分数乘法   CFraction CFraction::operator*(CFraction &CF2)  {      nume = nume * CF2.nume;      deno = deno * CF2.deno;      return (*this);  }    //定义分数除法   CFraction CFraction::operator/(CFraction &CF2)  {      nume = nume * CF2.deno;      deno = deno * CF2.nume;      return (*this);  }  //取反   CFraction CFraction::operator-()  {      nume = - nume;      deno = deno;      return (*this);  }    //比较大小   bool CFraction::operator > (CFraction &CF2)     {        nume = nume * CF2.deno;      CF2.nume = CF2.nume * deno;        if( nume  > CF2.nume )        {            return true;        }        else        {            return false;        }    }      bool CFraction::operator < (CFraction &CF2)     {        nume = nume * CF2.deno;      CF2.nume = CF2.nume * deno;        if( nume  < CF2.nume )        {            return true;        }        else        {            return false;        }    }      bool CFraction::operator >= (CFraction &CF2)     {        nume = nume * CF2.deno;      CF2.nume = CF2.nume * deno;        if( nume  >= CF2.nume )       {            return true;        }         else        {            return false;        }    }      bool CFraction::operator <= (CFraction &CF2)     {        nume = nume * CF2.deno;      CF2.nume = CF2.nume * deno;        if( nume  <= CF2.nume )       {            return true;        }        else        {            return false;        }    }      bool CFraction::operator == (CFraction &CF2)     {        nume = nume * CF2.deno;      CF2.nume = CF2.nume * deno;        if( nume  == CF2.nume )       {            return true;        }          else        {            return false;        }    }      bool CFraction::operator != (CFraction &CF2)     {        nume = nume * CF2.deno;      CF2.nume = CF2.nume * deno;        if( nume  != CF2.nume )       {            return true;        }         else        {            return false;        }    }      void main()  {      CFraction CF1, CF2;        cin >> CF1;               CF1.output(1);      cin >> CF2;       CF2.output(2);     cout << endl;        CFraction CF3(3,4), CF4(1,4),CF5;        cout << "CF3为:" ;       cout << CF3 << endl;      cout << "CF4为:" ;       cout << CF4 << endl;        CF5 = CF3;      CF5 = CF5 + CF4;      cout << "CF3 + CF4 = ";      cout << CF5 << endl;      cout << "化简后得:";      CF5.Simplify();        CF5 = CF3;      CF5 = CF5 - CF4;      cout << "CF3 - CF4 = ";      cout << CF5 << endl;      cout << "化简后得:";      CF5.Simplify();        CF5 = CF3;      CF5 = CF5 * CF4;      cout << "CF3 * CF4 = ";      cout << CF5 << endl;      cout << "化简后得:";      CF5.Simplify();        CF5 = CF3;      CF5 = CF5 / CF4;      cout << "CF3 / CF4 = ";      cout << CF5 << endl;      cout << "化简后得:";      CF5.Simplify();       CF5 = CF3;      CF5 = - CF5;      cout << "-CF3 = ";      cout << CF5 << endl;        cout << "比较两个分数大小:" << endl;            if (CF3 > CF4) cout << "CF3 > CF4" << endl;      if (CF3 < CF4) cout << "CF3 < CF4" << endl;      if (CF3 >= CF4) cout << "CF3 >= CF4" << endl;      if (CF3 <= CF4) cout << "CF3 <= CF4" << endl;      if (CF3 == CF4) cout << "CF3 == CF4" << endl;      if (CF3 != CF4) cout << "CF3 != CF4" << endl;            system("pause");  }  

运行结果:


感言:C++,效率挺高的啊。。。???

原创粉丝点击