项目一——分数类运算符重载3
来源:互联网 发布:qq怎么发淘宝链接 编辑:程序博客网 时间:2024/06/05 21:26
问题及代码:
/*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:李一波 * 完成日期:2016年5月30日 * 版本号:vc++6.0 * * 问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。 * 输入描述: * 程序输出: */#include <iostream>using namespace std;class CFraction{private: int nume; // 分子 int deno; // 分母public: CFraction(){} CFraction(int n,int d):nume(n),deno(d){} void show(); friend istream &operator>>(istream &in,CFraction &x); friend ostream &operator<<(ostream &out,CFraction x); CFraction operator+(const CFraction &a); CFraction operator-(const CFraction &a); CFraction operator*(const CFraction &a); CFraction operator/(const CFraction &a); CFraction operator+(const int &a); CFraction operator-(const int &a); CFraction operator*(const int &a); CFraction operator/(const int &a); bool operator>(const CFraction &a); bool operator<(const CFraction &a); bool operator>=(const CFraction &a); bool operator<=(const CFraction &a); bool operator==(const CFraction &a); bool operator!=(const CFraction &a); CFraction hua_jian(); CFraction operator+(); CFraction operator-(); CFraction operator~();};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"; else break; } return cin;}// 重载输出运算符<<ostream &operator<<(ostream &out,CFraction x){ cout<<x.nume<<'/'<<x.deno; return cout;}CFraction CFraction::operator+()//取正数{ return this->hua_jian();}CFraction CFraction::operator-()//取负数{ CFraction c; c.nume=-nume; c.deno=-deno; return c;}CFraction CFraction::operator~()//取倒数{ CFraction c; c.deno=nume; c.nume=deno; if(c.deno<0) { c.deno=-c.deno; c.nume=-c.nume; } return c.hua_jian();}CFraction CFraction::operator+(const CFraction &a){ CFraction c; if(deno==a.deno) c.nume=nume+a.nume; else { c.deno=deno*a.deno; c.nume=nume*a.deno+a.nume*deno; } return c.hua_jian();}CFraction CFraction::operator-(const CFraction &a){ CFraction c; if(deno==a.deno) c.nume=nume-a.nume; else { c.deno=deno*a.deno; c.nume=nume*a.deno-a.nume*deno; } return c.hua_jian();}CFraction CFraction::operator*(const CFraction &a){ CFraction c; c.deno=deno*a.deno; c.nume=nume*a.nume; return c.hua_jian();}CFraction CFraction::operator/(const CFraction &a){ CFraction c; c.deno=deno*a.nume; c.nume=nume*a.deno; return c.hua_jian();}CFraction CFraction::operator+(const int &a){ CFraction c; c.deno=deno; c.nume=nume+deno*a; return c.hua_jian();}CFraction CFraction::operator-(const int &a){ CFraction c; c.deno=deno; c.nume=nume-deno*a; return c.hua_jian();}CFraction CFraction::operator*(const int &a){ CFraction c; c.deno=deno; c.nume=nume*a; return c.hua_jian();}CFraction CFraction::operator/(const int &a){ CFraction c; c.deno=deno*a; c.nume=nume; return c.hua_jian();}bool CFraction::operator>(const CFraction &a){ if(deno==a.deno) if(nume>a.nume) return 1; else return -1; else { if(nume*a.deno>a.nume*deno) return 1; else return -1; }}bool CFraction::operator<(const CFraction &a){ if(deno==a.deno) if(nume<a.nume) return 1; else return -1; else { if(nume*a.deno<a.nume*deno) return 1; else return -1; }}bool CFraction::operator>=(const CFraction &a){ if(deno==a.deno) if(nume>=a.nume) return 1; else return -1; else { if(nume*a.deno>=a.nume*deno) return 1; else return -1; }}bool CFraction::operator<=(const CFraction &a){ if(deno==a.deno) if(nume<=a.nume) return 1; else return -1; else { if(nume*a.deno<=a.nume*deno) return 1; else return -1; }}bool CFraction::operator==(const CFraction &a){ if(deno==a.deno) if(nume==a.nume) return 1; else return -1; else { if(nume*a.deno==a.nume*deno) return 1; else return -1; }}bool CFraction::operator!=(const CFraction &a){ if(deno==a.deno) if(nume!=a.nume) return 1; else return -1; else { if(nume*a.deno!=a.nume*deno) return 1; else return -1; }}CFraction CFraction::hua_jian(){ int t,t1,t2; t1=nume; t2=deno; while(t2!=0) { t=t1%t2; t1=t2; t2=t; } nume/=t1; deno/=t1; if(deno<0) { deno=-deno; nume=-nume; } return *this;}void CFraction::show(){ cout<<nume<<'/'<<deno<<endl;}//重载函数的实现及用于测试的main()函数int main(){ CFraction c1(2,3),c2(5,6),c3; int i=2; c3=c1+c2; cout<<"c1+c2之和是:"; c3.show(); c3=c1-c2; cout<<"c1-c2之差是:"; c3.show(); c3=c1*c2; cout<<"c1*c2是:"; c3.show(); c3=c1/c2; cout<<"c1/c2是:"; c3.show(); c3=c1+i; cout<<"c1+i之和是:"; c3.show(); c3=c1-i; cout<<"c1-i之差是:"; c3.show(); c3=c1*i; cout<<"c1*i是:"; c3.show(); c3=c1/i; cout<<"c1/i是:"; c3.show(); if((c1>c2)==1) cout<<"c1大于c2"<<endl; else cout<<"c1小于c2"<<endl; if((c1<c2)==1) cout<<"c1小于c2"<<endl; else cout<<"c1大于c2"<<endl; if((c1>=c2)==1) cout<<"c1大于等于c2"<<endl; else cout<<"c1小于c2"<<endl; if((c1<=c2)==1) cout<<"c1小于等于c2"<<endl; else cout<<"c1大于c2"<<endl; if((c1==c2)==1) cout<<"c1等于c2"<<endl; else cout<<"c1不等于c2"<<endl; if((c1!=c2)==1) cout<<"c1不等于c2"<<endl; else cout<<"c1等于c2"<<endl; cout<<"-c1="<<-c1<<endl; cout<<"+c1="<<+c1<<endl; cout<<"c1的倒数: "<<~c1<<endl; return 0;}
运行结果:
0 0
- 项目一——分数类运算符重载3
- 第八周——运算符重载——项目三(一)分数类
- 第十三周项目一 分数类运算符重载
- 第十三周项目一-分数类中的运算符重载
- 第十三周项目一-分数类中的运算符重载
- 第十三周实践项目1————分数类运算符重载(3)
- 第八周上机实践项目3——分数类的运算符重载(1)
- 第八周上机实践项目3——分数类中的运算符重载(2)
- 第八周项目3(1)——分数类中的运算符重载
- 第八周项目3——分数类中的运算符重载(四则运算)
- 第七周项目3——分数类中的运算符重载
- 第九周上机实践项目3——分数类中的运算符重载(续)
- 第九周项目3——分数类中的运算符重载(续)
- 第九周项目3——分数类中的运算符重载(续)
- 第13周项目1—分数类中的运算符重载 (3)
- 项目3-分数类中的运算符重载
- /项目3-分数类中的运算符重载
- 项目3-分数类中的运算符重载
- 浅谈UML学习笔记动态图之状态图和活动图
- 仿今日头条和qq侧滑和智慧北京的小项目 3
- Redux详解(一)
- apache 默认目录的修改方法
- 编写简易的JS输入框模糊查询匹配(附有源码和demo)
- 项目一——分数类运算符重载3
- Qt 信号与槽研究2
- github上文件夹都是灰色-解决办法
- PHP框架四:JpGrap图表操作实例
- JSON相关
- 简单单个文件上传下载
- js实用表单模糊搜索和自动提示插件
- js实用表单模糊搜索和自动提示插件
- 自定义UITableViewCell(registerNib: 与 registerClass: 的区别)