/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作    者:王蕊*完成日期:2016年5月25日*版 本 号:v1.0**问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算
*/
#include <iostream>
#include <Cmath>
using namespace std;
class CFraction
{
private:int nume;  // 分子int deno;  // 分母
public:CFraction(int nu=0,int de=1):nume(nu),deno(de) {}void simplify();//输入输出的重载friend istream &operator>>(istream &in,CFraction &x);friend ostream &operator<<(ostream &out,CFraction x);CFraction operator+(const CFraction &c);  //两个分数相加,结果要化简CFraction operator-(const CFraction &c);  //两个分数相减,结果要化简CFraction operator*(const CFraction &c);  //两个分数相乘,结果要化简CFraction operator/(const CFraction &c);  //两个分数相除,结果要化简CFraction operator+();  //取正一目运算CFraction operator-();  //取反一目运算CFraction operator~();  //取倒数一目运算bool operator>(const CFraction &c);bool operator<(const CFraction &c);bool operator==(const CFraction &c);bool operator!=(const CFraction &c);bool operator>=(const CFraction &c);bool operator<=(const CFraction &c);
};
void CFraction::simplify()  // 分数化简
{int m,n,r;n=fabs(deno);m=fabs(nume);while(r=m%n)  // 求m,n的最大公约数{m=n;n=r;}deno/=n;     // 化简nume/=n;if (deno<0)  // 将分母转化为正数{deno=-deno;nume=-nume;}
}
istream &operator>>(istream &in,CFraction &x) // 重载输入运算符>>
{char ch;while(1){cin>>x.nume>>ch>>x.deno;if (x.deno==0)cerr<<"分母为0, 请重新输入\n";else if(ch!='/')cerr<<"格式错误(形如m/n)! 请重新输入\n";elsebreak;}return cin;
}
ostream &operator<<(ostream &out,CFraction x)  // 重载输出运算符<<
{cout<<x.nume<<'/'<<x.deno;return cout;
}
CFraction CFraction::operator+(const CFraction &c) // 分数相加
{CFraction t;t.nume=nume*c.deno+c.nume*deno;t.deno=deno*c.deno;t.simplify();return t;
}
CFraction CFraction:: operator-(const CFraction &c) // 分数相减
{CFraction t;t.nume=nume*c.deno-c.nume*deno;t.deno=deno*c.deno;t.simplify();return t;
}
CFraction CFraction:: operator*(const CFraction &c) // 分数相乘
{CFraction t;t.nume=nume*c.nume;t.deno=deno*c.deno;t.simplify();return t;
}
CFraction CFraction:: operator/(const CFraction &c) // 分数相除
{CFraction t;if (!c.nume) return *this;   //除法无效(除数为)时,这种情况需要考虑,但这种处理仍不算合理t.nume=nume*c.deno;t.deno=deno*c.nume;t.simplify();return t;
}
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;   //未对原分子为0的情况进行处理if(x.deno<0)   //保证负分数的负号在分子上{x.deno=-x.deno;x.nume=-x.nume;}return x;
}
bool CFraction::operator>(const CFraction &c) // 分数比较大小
{int this_nume,c_nume,common_deno;this_nume=nume*c.deno;        // 计算分数通分后的分子,同分母为deno*c.denoc_nume=c.nume*deno;common_deno=deno*c.deno;if ((this_nume-c_nume)*common_deno>0) return true;return false;
}
bool CFraction::operator<(const CFraction &c) // 分数比较大小
{int this_nume,c_nume,common_deno;this_nume=nume*c.deno;c_nume=c.nume*deno;common_deno=deno*c.deno;if ((this_nume-c_nume)*common_deno<0) return true;return false;
}
bool CFraction::operator==(const CFraction &c) // 分数比较大小
{if (*this!=c) return false;return true;
}
bool CFraction::operator!=(const CFraction &c) // 分数比较大小
{if (*this>c || *this<c) return true;return false;
}
bool CFraction::operator>=(const CFraction &c) // 分数比较大小
{if (*this<c) return false;return true;
}
bool CFraction::operator<=(const CFraction &c) // 分数比较大小
{if (*this>c) return false;return true;
}
int main()
{CFraction x,y,s;cout<<"输入x: ";cin>>x;cout<<"输入y: ";cin>>y;s=+x+y;cout<<"+x+y="<<s<<endl;s=x-y;cout<<"x-y="<<s<<endl;s=x*y;cout<<"x*y="<<s<<endl;s=x/y;cout<<"x/y="<<s<<endl;cout<<"-x="<<-x<<endl;cout<<"+x="<<+x<<endl;cout<<"x的倒数: "<<~x<<endl;cout<<x;if (x>y) cout<<"大于";if (x<y) cout<<"小于";if (x==y) cout<<"等于";cout<<y<<endl;return 0;
}

运行结果:

第十三周项目一-分数类中的运算符重载相关推荐

  1. 第十二周项目二-Time类中的运算符重载

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月24日*版 本 号:v1. ...

  2. 项目3-分数类中的运算符重载

    /* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 5 月 5 日 * 版 本 号:v1. ...

  3. /项目3-分数类中的运算符重载

    /* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 4 月 24 日 * 版 本 号:v1 ...

  4. 8-3 实现分数类中的运算符重载

    /* * 作 者: 霍雨佳 * 完成日期:2014 年4月15日 * 版 本 号:v1.0 * 问题描述:实现分数类中的运算符重载 * 样例输入: * 样例输出: * 项目要求:实现分数类中的运算符重 ...

  5. 分数类中的运算符重载(续)

    问题及代码: /** Copyright (c) 2014, 烟台大学计算机学院* All rights reserved.* 文件名称:test.cpp* 作 者:李盈盈* 完成日期:2015年 0 ...

  6. 第十二周上机实践项目 项目1-实现复数类中的运算符重载 (2)

    问题及代码: [项目-实现复数类中的运算符重载] (1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 class Complex { public:Complex() ...

  7. 第十二周-实现复数类中的运算符重载

    /* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作    者:李德彪 *完成时间:2016年5月23日 * ...

  8. 第7周-项目1-完整实现复数类中的运算符重载-扩展+、-、*、/运算符的功能

    问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:number.cpp *作 者:单昕昕 *完成日期:20 ...

  9. c++第八周【任务1-2】实现复数类中的运算符重载

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: c++第八周 ...

最新文章

  1. kvm--virsh命令行下管理虚拟机
  2. linux android编译环境,Linux下Android开发安装环境配置
  3. xshell使用xftp传输文件 使用pure-ftpd搭建ftp服务
  4. jquery之stop()的用法
  5. android备忘录教学_android基础备忘录(一)
  6. python获取字典的值_Python:如何从pandas系列中获取字典中的值
  7. 网站“注册流程”如何“照顾用户”?
  8. 大势要落地!开发者应该关注的 AI 应用落地实践
  9. mongodb 高可用分布式原理 ---------搭建高可用mongo集群前需要温习的知识-火
  10. Python初学16——程序设计方法学
  11. python身份证照片识别信息
  12. 魔兽8.0最新服务器人口普查,魔兽世界8.0最新人口普查: DH稳坐第一职业宝座 同盟种族人数惨淡...
  13. Unity实战篇 | 游戏中控制 地图无限自动化生成 的方法,进一步优化项目
  14. 如何比较两条回归直线
  15. apq用linux镜像,apq模拟器如何使用 apq模拟器使用方法教程
  16. ios 倒数器_如何利用ps绘制IOS7风格的倒数计时器
  17. 轻松学Python数据分析3-数据处理
  18. typedef- -
  19. 降本增效两不误——云原生赋能航空业数字化转型
  20. 网站做好后不能用手机浏览吗_企业的网站建设如何跟上时代的发展?

热门文章

  1. jmeter constant timer 如何添加_基于jmeter+perfmon的稳定性测试记录
  2. 5.QML动画——分组动画
  3. 学生计算机教室管理规章制度,学校规章制度之小学信息技术教室管理制度
  4. JXJJOI2018_T2_tank
  5. Browser Security-同源策略、伪URL的域
  6. [CommunityServer]事件代理
  7. Android UI开发神兵利器之Icon
  8. tensorflow 1.0 学习:十图详解tensorflow数据读取机制
  9. Java 如何使用radio button保存值
  10. Java提高篇——Java实现多重继承