第13周项目-分数中的运算符重载
2016-05-27 21:04
375 查看
问题描述及代码:
运行结果:
心得体会:
这段代码有个未解决的问题,分数取负那里编译有错误,而且是一大堆,找了好久也找不到问题出在哪,想把测试没问题的发上来,等到问题解决了再发文记录。
/* *copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:hellow.cpp *作者:田甜 *完成日期:2016年5月27日 *版本号:v1.0 * *问题描述:(1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。 (2)在(1)的基础上,实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。例如:CFraction a(1,3),b; int i=2; 可以完成b=a+i;。同样,可以完成i+a, 45+a, a*27, 5/a等各种运算。 (3)定义分数的一目运算+和-,分别代表分数取正和求反,将“按位取反运算符”~重载为分数的求倒数运算。 (4)定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。 *输入描述:无 *程序输出:///// */ #include <iostream> #include <Cmath> using namespace std; class CFraction { private: int nume; int deno; public: CFraction(int num=0,int den=1); void simply(); friend ostream& operator<<(ostream &output,CFraction &f); friend istream& operator>>(istream &input,CFraction &f);//如果运行后提示数据是私有但之前声明了友元,很有可能是因为函数的定义跟实现的名字不一样,比如丢了引用符号 CFraction operator+(const CFraction &f); CFraction operator-(const CFraction &f); CFraction operator*(const CFraction &f); CFraction operator/(const CFraction &f); CFraction operator+(); CFraction operator-(); CFraction operator~(); bool operator==(const CFraction &f); bool operator!=(const CFraction &f); bool operator>(const CFraction &f); bool operator<(const CFraction &f); bool operator>=(const CFraction &f); bool operator<=(const CFraction &f); }; CFraction::CFraction(int num,int den):nume(num),deno(den){} ostream& operator<<(ostream& output,CFraction &f) { output<<f.nume<<'/'<<f.deno<<endl; return output; } istream& operator>>(istream& input,CFraction &f) { input>>f.nume>>f.deno; return input; } void CFraction::simply() { int t; int m=fabs(nume); int n=fabs(deno); while(t=m%n) { m=n; n=t; } nume/=n; deno/=n; if(deno<0) { deno=-deno; nume=-nume; } } CFraction CFraction::operator+(const CFraction &f) { CFraction temp; temp.nume=nume*f.deno+f.nume*deno; //temp.deno=deno*f.deno+f.deno*deno;分母就不用加了 temp.deno=deno*f.deno; temp.simply(); return temp; } CFraction CFraction::operator*(const CFraction &f) { CFraction temp; temp.nume=nume*f.nume; temp.deno=deno*f.deno; temp.simply(); return temp; } CFraction CFraction::operator/(const CFraction &f) { if(!f.nume) return *this; CFraction temp; //temp=temp*~f; temp.nume=nume*f.deno; temp.deno=deno*f.nume; temp.simply(); return temp; } CFraction CFraction::operator-(const CFraction &f) { CFraction temp; temp.nume=nume*f.deno-f.nume*deno; temp.deno=deno*f.deno; temp.simply(); return temp; } CFraction CFraction::operator+() { CFraction temp; temp.deno=deno; if(nume<0) temp.nume=-nume; else temp.nume=nume; return *this; } CFraction CFraction::operator-() { CFraction temp; temp.nume=-nume; temp.deno=deno; return temp; } CFraction CFraction::operator~() { CFraction temp; temp.nume=deno; temp.deno=nume; return temp; } bool CFraction::operator>(const CFraction &f) { int this_nume,f_nume; this_nume=nume*f.deno; f_nume=nume*deno; if((this_nume-f_nume)>0) return true; else return false; } bool CFraction::operator<(const CFraction &f) { int this_nume,f_nume; this_nume=nume*f.deno; f_nume=nume*deno; if((this_nume-f_nume)<0) return true; else return false; } bool CFraction::operator>=(const CFraction &f) { if(*this<f) return false; else return true; } bool CFraction::operator<=(const CFraction &f) { if(*this>f) return false; else return true; } bool CFraction::operator==(const CFraction &f) { if(*this!=f) return false; else return true; } bool CFraction::operator!=(const CFraction &f) { if(*this<f||*this>f) return false; else 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; }
运行结果:
心得体会:
这段代码有个未解决的问题,分数取负那里编译有错误,而且是一大堆,找了好久也找不到问题出在哪,想把测试没问题的发上来,等到问题解决了再发文记录。
相关文章推荐
- 软件工程---阅读《构建之法》第8、9、10章读后感
- 1013. 数素数 (20)
- onmouseover 事件缩略图片滑动 修正版
- 第10章-基于树的方法(3)-树的改进-集成方法
- 缩略图实现思路
- poj 1015 Jury Compromise
- linux下的简单文件读写锁的操作
- 排序算法之插入排序
- 关于easyui grid中的load,reload,loadData区别
- Win7主机安装VMWare虚拟机配置,使得主机与虚拟机之间互通且虚拟机正常上网
- Android AsyncTask介绍
- Learning OpenCV: cvPyrDown and display video
- viewpager+fragment来回滑动fragment重新加载的简单解决办法
- c++第六次作业
- java nio 读取大文件
- Latex:表格制作全攻略
- 深入学习java集合:JAVA集合类主要接口
- 进一步学习MVC框架
- Extjs gridPanel 小计保存不上
- LaTex:图片排版