第9周任务3

来源:互联网 发布:js文件编写格式 编辑:程序博客网 时间:2024/05/20 04:50

/*  

实验内容:定义分数类中<<和>>运算符重载  

* 程序的版权和版本声明部分   

* Copyright (c) 2011, 烟台大学计算机学院学生   

* All rights reserved.   

* 文件名称: 定义分数类中<<和>>运算符重载                             

* 作    者:付文杰                              

* 完成日期:  2012       年  4    月  17     日   

* 版 本号:  x1.0            

*/  

 

//【任务3】接第8周任务3,定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。   #include<iostream>     using namespace std;    class CFraction  {  private:      int nume;  // 分子       int deno;  // 分母    public:      CFraction(int nu = 0, int de = 1) : nume(nu), deno(de){};   //构造函数,初始化用       void output1();        friend ostream& operator << (ostream &,CFraction &);      friend istream& operator >> (istream &,CFraction &);        CFraction operator+(CFraction &c1);      CFraction operator-(CFraction &c1);      CFraction operator*(CFraction &c1);      CFraction operator/(CFraction &c1);        CFraction operator-();//取反         //比较运算符(二目)的重载       bool operator > (CFraction &c1);      bool operator < (CFraction &c1);      bool operator >= (CFraction &c1);      bool operator <= (CFraction &c1);      bool operator == (CFraction &c1);      bool operator != (CFraction &c1);    };    ostream& operator << (ostream &ouput, CFraction &c)  {        int i;        if(c.deno == 0)        cout<<"error"<<endl;       if(c.nume >= 0)      {          if(c.deno < c.nume)i = c.deno;          else i = c.nume;          for(; i > 0; --i)          {              if(c.nume % i == 0 && c.deno % i == 0)              {                  c.nume = c.nume / i;                  c.deno = c.deno / i;                  break;              }           }           ouput << c.nume << "/" << c.deno << endl;       }      else       {          c.nume = -c.nume;          if(c.deno < c.nume)i = c.deno;          else i = c.nume;          for(; i > 0; --i)          {              if(c.nume % i == 0 && c.deno % i == 0)              {                  c.nume = c.nume / i;                  c.deno = c.deno / i;                  break;              }           }           ouput << -c.nume << "/" << c.deno << endl;       }      return ouput;  }      istream& operator >> (istream &input, CFraction &c)  {      char c1;      cout << "请输入一个分数(格式:x/y):";      input >> c.nume >> c1 >> c.deno;      do      {          if(c1 == '/')break;          else          {              cout << "格式错误,请重新输入一个分数(格式:x/y):";              input >> c.nume >> c1 >> c.deno;          }      }while(1);      return input;  }    CFraction CFraction :: operator+(CFraction &c1)  {       CFraction c2;        c2.deno = deno * c1.deno;        c2.nume = nume * c1.deno + c1.nume * deno;        return c2;    }      CFraction CFraction :: operator-(CFraction &c1)  {        CFraction c2;        c2.deno = deno * c1.deno;        c2.nume = nume * c1.deno - c1.nume * deno;        return c2;    }      CFraction CFraction :: operator*(CFraction &c1)  {        CFraction c2;        c2.deno = deno * c1.deno;        c2.nume = nume * c1.nume;        return c2;    }      CFraction CFraction :: operator/(CFraction &c1)  {        CFraction c2;        c2.deno = deno * c1.nume;        c2.nume = nume * c1.deno;        return c2;    }      CFraction CFraction :: operator-()//取反   {      CFraction c2;       c2.nume = -nume;      c2.deno = deno;        return c2;  }    void CFraction :: output1()    {        cout << nume << "/" << deno << endl;    }     //比较运算符(二目)的重载   bool CFraction :: operator > (CFraction &c1)  {      CFraction c2, c3;      c2.nume = nume * c1.deno;      c3.nume = c1.nume * deno;      if(c2.nume > c3.nume)return true;      else return false;  }    bool CFraction :: operator < (CFraction &c1)  {      CFraction c2, c3;      c2.nume = nume * c1.deno;      c3.nume = c1.nume * deno;      if(c2.nume < c3.nume)return true;      else return false;  }    bool CFraction :: operator >= (CFraction &c1)  {      CFraction c2, c3;      c2.nume = nume * c1.deno;      c3.nume = c1.nume * deno;      if(c2.nume < c3.nume)return false;      else return true;  }    bool CFraction :: operator <= (CFraction &c1)  {      CFraction c2, c3;      c2.nume = nume * c1.deno;      c3.nume = c1.nume * deno;      if(c2.nume > c3.nume)return false;      else return true;  }    bool CFraction :: operator == (CFraction &c1)  {      CFraction c2, c3;      c2.nume = nume * c1.deno;      c3.nume = c1.nume * deno;      if((c2.nume >= c3.nume) && (c2.nume <= c3.nume))return true;      else return false;  }    bool CFraction :: operator != (CFraction &c1)  {      CFraction c2, c3;      c2.nume = nume * c1.deno;      c3.nume = c1.nume * deno;      if((c2.nume > c3.nume) || (c2.nume < c3.nume))return true;      else return false;  }    void main()  {      CFraction c1, c2, c3;      cin >> c1 >> c2;      cout <<"c1 = ";      c1.output1();      cout <<"c2 = ";      c2.output1();        c3 = c1 + c2;      cout << "c1 + c2 = " << c3;            c3 = c1 - c2;      cout << "c1 - c2 = " << c3;        c3 = c1 * c2;      cout << "c1 * c2 = " << c3;        c3 = c1 / c2;      cout << "c1 / c2 = " << c3;        c3 = -c1;      cout << "-c1 = " << c3;        cout << endl;            cout<<"下面比较两个分数的大小:\n";      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;      cout<<endl;              system("pause");  }  

运行结果: