第十一周项目1-分数类中的运算符重载(1)
2016-05-23 20:37
225 查看
问题及代码:
运行结果:
知识点总结:
运算符重载
学习心得:
分数化简的时候,while(r==0),这样的话,n=r,后面的运算就出错了。在纸上画一画比较好找问题所在。
/* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:zwj.cpp *作 者:张伟晶 *完成日期:2016年5月23日 *版 本 号:v1.0 * *问题描述:实现分数类中的运算符重载,完成加减乘除比较的运算 *输入描述: *程序输出: */ #include<iostream> #include<cmath> using namespace std; class CFraction { private: int num;//分子 int deno;//分母 public: //构造函数及运算符重载的声明 CFraction (int nu=0,int de=1):num(nu),deno(de){} void huajian(); 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); //分数比较大小 bool operator>(const CFraction &c); bool operator<(const CFraction &c); bool operator==(const CFraction &c); }; //重载函数的实现以及用于测试的main()函数 void CFraction::huajian() { int k; if(num>0) k=2; else { k=1; num=-num; } int m,n,r=1; m=num; n=deno; while(r=m%n) { m=n; n=r; } num=num/n*pow(-1,k); deno=deno/n; } // 重载输入运算符>> istream &operator>>(istream &in,CFraction &x) { char ch; while(1) { cin>>x.num>>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.num<<'/'<<x.deno; return cout; } CFraction CFraction::operator+(const CFraction &c) { CFraction w; w.deno=deno*c.deno; w.num=num*c.deno+c.num*deno; w.huajian(); return w; } CFraction CFraction::operator-(const CFraction &c) { CFraction w; w.deno=deno*c.deno; w.num=num*c.deno-c.num*deno; w.huajian(); return w; } CFraction CFraction::operator*(const CFraction &c) { CFraction w; w.deno=deno*c.deno; w.num=num*c.num; w.huajian(); return w; } CFraction CFraction::operator/(const CFraction &c) { CFraction w; w.deno=deno*c.deno; w.num=num*c.deno/c.num*deno; w.huajian(); return w; } //比较大小 bool CFraction::operator>(const CFraction &c) { int m,n; m=num*c.deno; n=c.num*deno; if((m-n)>0) return true; else return false; } bool CFraction::operator<(const CFraction &c) { int m,n; m=num*c.deno; n=c.num*deno; if((m-n)<0) return true; else return false; } bool CFraction::operator==(const CFraction &c) { int m,n; m=num*c.deno; n=c.num*deno; if((m-n)==0) return true; else return false; } int main() { CFraction x,y,z; cout<<"请输入x,y"<<endl; cout<<"x:"; cin>>x; cout<<"y:"; cin>>y; cout<<"**********加减乘除**********"<<endl; z=x+y; cout<<"x+y="<<z<<endl; z=x-y; cout<<"x-y="<<z<<endl; z=x*y; cout<<"x*y="<<z<<endl; z=x/y; cout<<"x/y="<<z<<endl; cout<<endl; cout<<"**********比较大小**********"<<endl; if(x>y) cout<<"x>y"<<endl; if(x<y) cout<<"x<y"<<endl; if(x==y) cout<<"x=y"<<endl; return 0; }
运行结果:
知识点总结:
运算符重载
学习心得:
分数化简的时候,while(r==0),这样的话,n=r,后面的运算就出错了。在纸上画一画比较好找问题所在。
相关文章推荐
- OC 习题:股票K线计算
- 添加远程库
- Codeforces Round #353 (Div. 2) E 线段树+dp
- POJ 2114 Boatherds 树的分治
- {题解}[jzoj3396] 【NOIP2013模拟】Rainbow的信号
- 【NOIP2013模拟】Rainbow的信号
- struts2运行出现The requested is not available(404)错误,解决方案
- 允许ubuntu下mysql远程连接
- 项目32-警察与厨师
- oracle 高级分组
- Python写的嗅探器——Pyside,Scapy
- 构建之法阅读笔记03
- C#中多路广播与委托合并
- 专题三 Problem E
- 信长之野望14创造
- c++中头文件iomanip
- Octave 线性代数 矩阵 2
- 分答
- centOs 6.5 ssh配置无密码登入
- java中常见面试题总结