2015年第八周项目三:分数类中的运算符重载(2)
来源:互联网 发布:一键开关蜂窝数据 编辑:程序博客网 时间:2024/05/18 01:34
#include<iostream>#include<Cmath>#include<cstdlib>using namespace std;int gcd(int m, int n);class CFraction{private: int nume; // 分子 int deno; // 分母public: CFraction(int nu=0,int de=1); //构造函数,初始化用 void set(int nu=0,int de=1); //置值,改变值时用 void display(); void simplify();//化简(使分子分母没有公因子) //放大n倍,如2/3放大5倍为10/3 bool operator > ( CFraction& c); bool operator < ( CFraction& c); bool operator >= ( CFraction& c); bool operator <= ( CFraction& c); bool operator == ( CFraction& c); bool operator != ( CFraction& c); //二目的加减乘除运算符的重载 CFraction operator+( CFraction& c); CFraction operator-( CFraction& c); CFraction operator*( CFraction& c); CFraction operator/( CFraction& c); CFraction operator+( int c); CFraction operator-( int c); CFraction operator*( int c); CFraction operator/( int c); friend CFraction operator+(int m,CFraction &c); friend CFraction operator-(int m,CFraction &c); friend CFraction operator*(int m,CFraction &c); friend CFraction operator/(int m,CFraction &c);};CFraction operator+(int m,CFraction &c){ CFraction t; t.nume=c.nume+m*c.deno; t.simplify(); return t;}CFraction operator-(int m,CFraction &c){ CFraction t; t.nume=m*c.deno-c.nume; t.simplify(); return t;}CFraction operator*(int m,CFraction &c){ CFraction t; t.nume=c.nume*m; t.simplify(); return t;}CFraction operator/(int m,CFraction &c){ CFraction t; //除法无效时,这种情况需要考虑,但这种处理仍不算合理 t.nume=m*c.deno; t.deno=c.nume; t.simplify(); return t;}CFraction CFraction::operator+(int c){ CFraction t; t.nume=nume+c*deno; t.simplify(); return t;}CFraction CFraction::operator-(int c){ CFraction t; t.nume=nume-c*deno; t.simplify(); return t;}CFraction CFraction::operator*(int c){ CFraction t; t.nume=nume*c; t.simplify(); return t;}CFraction CFraction:: operator/(int c){ CFraction t; if (!c) return *this; //除法无效时,这种情况需要考虑,但这种处理仍不算合理 t.nume=nume/c; t.simplify(); return t;}void CFraction::display(){ cout<<nume<<"/"<<deno<<endl;}bool CFraction::operator>( CFraction& c){ if((nume*c.deno)>(c.nume*deno))return true; else return false;}bool CFraction::operator==( CFraction& c){ if((nume*c.deno)==(c.nume*deno))return true; else return false;}bool CFraction::operator<( CFraction& c){ if(*this>c||*this==c)return false; else return true;}bool CFraction::operator>=( CFraction& c){ if(*this<c)return false; else return true;}bool CFraction::operator<=( CFraction& c){ if(*this>c)return false; else return true;}bool CFraction::operator!=( CFraction& c){ if(*this==c)return false; else return true;}CFraction CFraction:: operator+( CFraction& c){ CFraction t; t.nume=nume*c.deno+c.nume*deno; t.deno=deno*c.deno; t.simplify(); return t;}CFraction CFraction:: operator-( CFraction& c){ CFraction t; t.nume=nume*c.deno-c.nume*deno; t.deno=deno*c.deno; t.simplify(); return t;}CFraction CFraction:: operator*( CFraction& c){ CFraction t; t.nume=nume*c.nume; t.deno=deno*c.deno; t.simplify(); return t;}CFraction CFraction:: operator/(CFraction &c){ CFraction t; if (!c.nume) return *this; //除法无效时,这种情况需要考虑,但这种处理仍不算合理 t.nume=nume*c.deno; t.deno=deno*c.nume; t.simplify(); return t;}CFraction::CFraction(int nu,int de) //构造函数,初始化用{ if (de!=0) { nume=nu; deno=de; } else { cerr<<"初始化中发生错误,程序退出\n"; exit(0); }}void CFraction::set(int nu,int de) //置值,改变值时用{ if (de!=0) //如果不合适,改变值操作无效 { nume=nu; deno=de; }}// 分数化简,使分子分母没有公因子void CFraction::simplify(){ int n=gcd(deno, nume); deno/=n; // 化简 nume/=n;}// 求m,n的最大公约数int gcd(int m, int n) //这个函数可以定义为类的成员函数,也可以为一般函数{ int r; if (m==0) { return n; } while(r=m%n) // 求m,n的最大公约数 { m=n; n=r; } return n;}int main(){ CFraction x(1,3),y(-5,10),s; cout<<"分数x=1/3 y=-5/10"<<endl; s=x+y; cout<<"x+y="; s.display(); s=x-y; cout<<"x-y="; s.display(); s=x*y; cout<<"x*y="; s.display(); s=x/y; cout<<"x/y="; s.display(); s=x+y; cout<<"x+y="; s.display(); x.display(); if (x>y) cout<<"大于"<<endl; if (x<y) cout<<"小于"<<endl; if (x==y) cout<<"等于"<<endl; y.display(); cout<<endl; CFraction c1(5,3),c2; //以下建议在调试环境中完成测试, c2=c1+5; c2=5+c1; c2=c1-5; c2=5-c1; c2=c1*5; c2=5*c1; c2=c1/5; c2=5/c1; return 0;}
0 0
- 2015年第八周项目三:分数类中的运算符重载(2)
- 第八周项目三 分数类中的运算符重载-(2)分数与分数、分数与整数的四则运算
- 2015年第八周项目三:分数类中的运算符重载(1)
- 第八周项目三----分数类中的运算符重载
- 第八周 项目三:分数类中的运算符重载
- 第八周项目三 分数类中的运算符重载
- 第八周项目三--分数类中的运算符重载
- 第八周项目三-分数类中的运算符重载
- 第八周项目三 分数类中的运算符重载-(1)分数的加减乘除
- 第八周(项目三2)——分数类中的运算符重载。
- 第八周 项目三-分数类中的运算符重载(2)
- 第八周 项目三(2):分数类中的运算符重载
- 第八周项目三 分数类中的运算符重载 (2)
- 第八周项目三(2):分数类中的运算符重载:升级版
- 15第八周项目三——分数类中的运算符重载(2)
- 第八周项目三--分数类中的运算符重载(2)
- 第八周项目三——分数类中的运算符重载(2)
- 第八周 项目三(2)分数类中的运算符重载
- Xcode6为什么干掉pch(Precompile Prefix Header)&如何添加pch文件
- 【javascript数据结构】----数组
- 开发中遇到的问题(2015-05-23)
- EditText 点击事件小问题
- 表达式树
- 2015年第八周项目三:分数类中的运算符重载(2)
- 如何写一个Pod,并发布到CocoaPods上
- 金沙娱乐城开心一笑
- mysql 姓名首字母排序
- Android透明圆形进度条对话框的设置
- UILable常见用法 - iOS - UI基础知识总结3
- ssh出现的问题
- How to: Shellcode to reverse bind a shell with netcat(如何使用netcat进行shellcode反向链接)
- Opencv图像在MFC中显示的几种方法