第八周项目3-2:分数类中的运算符重载(涉及分数和整数的运算)
来源:互联网 发布:威客网站 知乎 编辑:程序博客网 时间:2024/05/01 06:03
问题及代码:
/**Copyright (c)2015,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:project.cpp*作 者:陈文青*完成日期:2015年5月9日*版 本 号:v1.0**问题描述:在(1)的基础上,实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。例如: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;int gcd(int, int);class CFraction{private: int nume; // 分子 int deno; // 分母public: CFraction(int nu=0,int de=1):nume(nu),deno(de) {} void display(); void simplify(); //输入输出的重载 CFraction operator+(const CFraction &c); //两个分数相加,结果要化简 CFraction operator-(const CFraction &c); //两个分数相减,结果要化简 CFraction operator*(const CFraction &c); //两个分数相乘,结果要化简 CFraction operator/(const CFraction &c); //两个分数相除,结果要化简 friend CFraction operator+(CFraction &c, int i); friend CFraction operator+(int i,CFraction &c ); friend CFraction operator-(CFraction &c, int i); friend CFraction operator-(int i,CFraction &c ); friend CFraction operator*(CFraction &c, int i); friend CFraction operator*(int i,CFraction &c ); friend CFraction operator/(CFraction &c, int i); friend CFraction operator/(int i,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); bool operator<=(const CFraction &c); friend bool operator>(const CFraction &c, int i); friend bool operator>(int i, const CFraction &c); friend bool operator<(const CFraction &c, int i); friend bool operator<(int i, const CFraction &c); friend bool operator==(const CFraction &c, int i); friend bool operator==(int i, const CFraction &c); friend bool operator!=(const CFraction &c, int i); friend bool operator!=(int i, const CFraction &c); friend bool operator>=(const CFraction &c, int i); friend bool operator>=(int i, const CFraction &c); friend bool operator<=(const CFraction &c, int i); friend bool operator<=(int i, const CFraction &c);};//输出分数void CFraction::display(){ cout<<nume<<"/"<<deno<<endl;}// 分数化简void CFraction::simplify(){ int n=fabs(nume),d=fabs(deno); int r=gcd(n,d);//r为nume和deno的最大公约数,,切在求最大公约数时,两个数必须都是正数 deno/=r; // 化简 nume/=r; if (deno<0) // 将分母转化为正数 { deno=-deno; nume=-nume; }}// 分数相加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; t.nume=nume*c.deno; t.deno=deno*c.nume; t.simplify(); return t;}// 分数比较大小bool CFraction::operator>(const CFraction &c){ CFraction t=*this-c; t.simplify(); if(nume>0) return true; else return false;}// 分数比较大小bool CFraction::operator<(const CFraction &c){ CFraction t=*this-c; t.simplify(); if(nume<0) return true; else return false;}// 分数比较大小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;}// 分数比较大小bool CFraction::operator<=(const CFraction &c){ if (*this>c) return false; return true;}//求最大公约数;int gcd(int x,int y){ int i; while(y>0) { i=x%y; x=y; y=i; } return x;}//友元函数的定义CFraction operator+(CFraction &c, int i){ CFraction t(i,1); return (c+t);}CFraction operator+(int i,CFraction &c ){ CFraction t(i,1); return (t+c);}CFraction operator-(CFraction &c, int i){ CFraction t(i,1); return(c-t);}CFraction operator-(int i, CFraction &c ){ CFraction t(i,1); return(t-c);}CFraction operator*(CFraction &c, int i){ CFraction t(i,1); return(c*t);}CFraction operator*(int i,CFraction &c ){ CFraction t(i,1); return(t*c);}CFraction operator/(CFraction &c, int i){ CFraction t(i,1); return(c/t);}CFraction operator/(int i, CFraction &c ){ CFraction t(i,1); return(t/c);}bool operator>(const CFraction &c, int i){ return(c.nume>i*c.deno);}bool operator>(int i, const CFraction &c){ return(i*c.deno>c.nume);}bool operator<(const CFraction &c, int i){ return (c.nume<i*c.deno);}bool operator<(int i, const CFraction &c){ return (i*c.deno<c.nume);}bool operator==(const CFraction &c, int i){ return (c.nume==(i*c.deno));}bool operator==(int i, const CFraction &c){ return (c.nume==(i*c.deno));}bool operator!=(const CFraction &c, int i){ return (c.nume!=(i*c.deno));}bool operator!=(int i, const CFraction &c){ return (c.nume!=(i*c.deno));}bool operator>=(const CFraction &c, int i){ return !(c<i); //充分利用已经重载过的运算符}bool operator>=(int i, const CFraction &c){ return !(c>i);}bool operator<=(const CFraction &c, int i){ return !(c>i);}bool operator<=(int i, const CFraction &c){ return !(c<i);}int main(){ CFraction x(4,5),y(3,4); cout<<"x="; x.display(); cout<<"y="; y.display(); cout<<"x+y="; (x+y).display(); cout<<"x-y="; (x-y).display(); cout<<"x*y="; (x*y).display(); cout<<"x/y="; (x/y).display(); if(x>y) cout<<"x>y"<<endl; if(x<y) cout<<"x<y"<<endl; if(x==y) cout<<"x=y"<<endl; if(x!=y) cout<<"x!=y"<<endl; cout<<"x+3="; (x+3).display(); cout<<"y-1="; (y-1).display(); cout<<"2*x="; (2*x).display(); cout<<"x/3="; (x/3).display(); if(1>y) cout<<"1>y"<<endl; if(x<3) cout<<"x<3"<<endl; if(x==1) cout<<"x=1"<<endl; if(2!=y) cout<<"2!=y"<<endl; return 0;}
运行结果:
知识点总结:
分数类中的运算符重载
学习心得:
如程序中各种注释。
0 0
- 第八周项目3-2:分数类中的运算符重载(涉及分数和整数的运算)
- 第八周项目三 分数类中的运算符重载-(2)分数与分数、分数与整数的四则运算
- 第八周上机实践项目3-分数类中的运算符重载(分数与分数、分数与整数)
- 第八周项目三 分数类中的运算符重载-(1)分数的加减乘除
- 第八周 项目3 分数类中的运算符重载
- 第八周【项目3-分数类中的运算符重载】
- 第八周项目3-分数类中的运算符重载
- 第八周 项目3 分数类中的运算符重载
- 第八周项目3-分数类中的运算符重载
- 第八周【项目3-分数类中的运算符重载】
- 第八周【项目3-分数类中的运算符重载】
- 第八周项目3 分数类中的运算符重载
- 第八周项目3-分数类中的运算符重载
- 第八周项目3-分数类中的运算符重载
- 第八周项目3-分数类中的运算符重载
- 第二学期第八周项目3--分数类中的运算符重载(2)
- 第八周上机实践项目3——分数类中的运算符重载(2)
- 第八周 项目3-分数类中的运算符重载(2)
- 判断时间的函数
- mac os x 入门记录
- apache cxf学习
- Java学习笔记之集合框架2
- Start()函数与Awake()函数 一个容易被忽略的差别
- 第八周项目3-2:分数类中的运算符重载(涉及分数和整数的运算)
- java的基本类型
- Openwrt无线管理工具/命令
- Swift之旅(四)对象和类
- Project Euler -- 3 Largest prime factor
- 笔记108--shape和selector和layer-list
- 深入理解Java内存模型之系列篇
- J2EE7环境安装配置
- UILocalizedIndexedCollation简介