/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: 分数类中的运算符重载
* 作 者: 于宸
* 完成日期: 2012 年 04 月 16 日
* 版 本 号: 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");
- }