第十三周项目一-分数类中的运算符重载
/**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;
}
运行结果:
第十三周项目一-分数类中的运算符重载相关推荐
- 第十二周项目二-Time类中的运算符重载
/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月24日*版 本 号:v1. ...
- 项目3-分数类中的运算符重载
/* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 5 月 5 日 * 版 本 号:v1. ...
- /项目3-分数类中的运算符重载
/* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 4 月 24 日 * 版 本 号:v1 ...
- 8-3 实现分数类中的运算符重载
/* * 作 者: 霍雨佳 * 完成日期:2014 年4月15日 * 版 本 号:v1.0 * 问题描述:实现分数类中的运算符重载 * 样例输入: * 样例输出: * 项目要求:实现分数类中的运算符重 ...
- 分数类中的运算符重载(续)
问题及代码: /** Copyright (c) 2014, 烟台大学计算机学院* All rights reserved.* 文件名称:test.cpp* 作 者:李盈盈* 完成日期:2015年 0 ...
- 第十二周上机实践项目 项目1-实现复数类中的运算符重载 (2)
问题及代码: [项目-实现复数类中的运算符重载] (1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 class Complex { public:Complex() ...
- 第十二周-实现复数类中的运算符重载
/* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作 者:李德彪 *完成时间:2016年5月23日 * ...
- 第7周-项目1-完整实现复数类中的运算符重载-扩展+、-、*、/运算符的功能
问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:number.cpp *作 者:单昕昕 *完成日期:20 ...
- c++第八周【任务1-2】实现复数类中的运算符重载
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: c++第八周 ...
最新文章
- kvm--virsh命令行下管理虚拟机
- linux android编译环境,Linux下Android开发安装环境配置
- xshell使用xftp传输文件 使用pure-ftpd搭建ftp服务
- jquery之stop()的用法
- android备忘录教学_android基础备忘录(一)
- python获取字典的值_Python:如何从pandas系列中获取字典中的值
- 网站“注册流程”如何“照顾用户”?
- 大势要落地!开发者应该关注的 AI 应用落地实践
- mongodb 高可用分布式原理 ---------搭建高可用mongo集群前需要温习的知识-火
- Python初学16——程序设计方法学
- python身份证照片识别信息
- 魔兽8.0最新服务器人口普查,魔兽世界8.0最新人口普查: DH稳坐第一职业宝座 同盟种族人数惨淡...
- Unity实战篇 | 游戏中控制 地图无限自动化生成 的方法,进一步优化项目
- 如何比较两条回归直线
- apq用linux镜像,apq模拟器如何使用 apq模拟器使用方法教程
- ios 倒数器_如何利用ps绘制IOS7风格的倒数计时器
- 轻松学Python数据分析3-数据处理
- typedef- -
- 降本增效两不误——云原生赋能航空业数字化转型
- 网站做好后不能用手机浏览吗_企业的网站建设如何跟上时代的发展?
热门文章
- jmeter constant timer 如何添加_基于jmeter+perfmon的稳定性测试记录
- 5.QML动画——分组动画
- 学生计算机教室管理规章制度,学校规章制度之小学信息技术教室管理制度
- JXJJOI2018_T2_tank
- Browser Security-同源策略、伪URL的域
- [CommunityServer]事件代理
- Android UI开发神兵利器之Icon
- tensorflow 1.0 学习:十图详解tensorflow数据读取机制
- Java 如何使用radio button保存值
- Java提高篇——Java实现多重继承