第13周项目1:分数类中的运算符重载(2)
2016-05-31 16:05
295 查看
/* * Copyright(c)2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:第13周项目1:分数类中的运算符重载(2) * 作者:于子娴 * 完成日期:2016.5.31 * 版本号:v1.0 * * 问题描述:实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则 运算,且运算符合交换。例如:CFraction a(1,3),b; int i=2;可以完成b=a+i;。 同样,可以完成i+a,45+a,a*27,5/a等各种运算。 * 输入描述: * 程序输出: */ #include<iostream> #include<cmath> using namespace std; class CFraction { private: int nume; //分子 int deno; //分母 public: //构造函数及运算符重载的函数声明 CFraction(int n=0,int d=0):nume(n),deno(d){} CFraction operator+(const CFraction&c1) const; CFraction operator-(const CFraction&c1) const; CFraction operator*(const CFraction&c1) const; CFraction operator/(const CFraction&c1) const; CFraction operator+(int a) const; CFraction operator-(int a) const; CFraction operator*(int a) const; CFraction operator/(int a) const; 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 display(); void simplify(); }; //重载函数的实现及用于测试的main()函数 CFraction CFraction::operator+(const CFraction&c1) const { return CFraction(c1.deno*nume+c1.nume*deno,deno*c1.deno); } CFraction CFraction::operator-(const CFraction&c1) const { return CFraction(c1.deno*nume-c1.nume*deno,deno*c1.deno); } CFraction CFraction::operator*(const CFraction&c1) const { return CFraction(nume*c1.nume,deno*c1.deno); } CFraction CFraction::operator/(const CFraction&c1) const { return CFraction(nume/c1.nume,deno/c1.deno); } CFraction CFraction::operator+(int a) const { return CFraction(a*deno+nume,deno); } CFraction CFraction::operator-(int a) const { return CFraction(nume*a,deno); } CFraction CFraction::operator*(int a) const { return CFraction(nume*a,deno); } CFraction CFraction::operator/(int a) const { return CFraction(nume,deno*a); } bool CFraction::operator>(const CFraction &c) { int n1,d1; n1=nume*c.deno-c.nume*deno; d1=deno*c.deno; if(n1*d1>0) return true; return false; } bool CFraction::CFraction::operator<(const CFraction &c) { int n1,d1; n1=nume*c.deno-c.nume*deno; d1=deno*c.deno; if(n1*d1<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) return false; return true; } 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; } void CFraction::display() { cout<<nume<<"/"<<deno<<endl; } void CFraction::simplify() { int m,n,t; n=fabs(deno); m=fabs(nume); while(t=m%n)// 求m,n的最大公约数 { m=n; n=t; } deno/=n; nume/=n; if(deno<0) { deno=-deno; nume=-nume; } } int main() { char c; int n,d; cout<<"输入分数的样例:x/y"<<endl; cin>>n>>c>>d; CFraction x(n,d); x.simplify(); x.display(); cin>>n>>c>>d; CFraction y(n,d); y.simplify(); y.display(); CFraction s; s=x+y; cout<<"x+y="; s.simplify(); s.display(); cout<<endl; s=x-y; cout<<"x-y="; s.simplify(); s.display(); cout<<endl; s=x*y; cout<<"x*y="; s.simplify(); s.display(); cout<<endl; s=x/y; cout<<"x/y="; s.simplify(); s.display(); cout<<endl; cout<<"请输入要进行运算的整数d"<<endl; cin>>d; s=x+d; cout<<"x+d="; s.display(); cout<<endl; s=x-d; cout<<"x-d="; s.display(); cout<<endl; s=x*d; cout<<"x*d="; s.display(); cout<<endl; s=x/d; cout<<"x/d="; s.display(); cout<<endl; if(x>y) cout<<"大于!"<<endl; if(x<y) cout<<"小于! "<<endl; if(x==y) cout<<"等于!"<<endl; return 0; }
运行结果:
相关文章推荐
- 第12周项目3-数组类运算的实现
- zabbix客户端安装
- Middle-题目44:334. Increasing Triplet Subsequence
- Tomcat配置JNDI数据源
- apache开启vhost后,适应ThinkPHP的rewrite模式
- 内网服务器配置DDNS实现外网固定域名访问
- JavaScript学习--Item29 DOM基础详解
- 用Kibana和logstash快速搭建实时日志查询、收集与分析系统
- orcale使用row_number序号递增,遇到不同的序号重新递增
- 我的第一个安卓工程:云计算环境下基于安卓的任务执行系统 (1)系统概述
- AFNetworking3.1 POST 请求
- win7系统连接蓝牙鼠标或键盘后无线网络总是掉线的原因及解决办法
- 数据库连接池
- Middle-题目42/43:274. H-Index && 275. H-Index II
- Android 对话框封装(确认/取消 )
- 补作业:随机生成二元四则运算
- 用kryonet时kryo报buffer underflow错误
- 将EXCEL文件转换成utf8编码的csv文件
- 关于Android xml 绘图
- 线程加载数据后的ui线程刷新实现