第十三周项目1——分数类中的运算符重载
来源:互联网 发布:博时大数据100好买 编辑:程序博客网 时间:2024/06/05 04:18
问题及代码:
/* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:main.cpp * 作 者:赵志君 * 完成日期:2016年5月26日 * 版 本 号: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>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 &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); bool operator <= (const CFraction &c); bool operator == (const CFraction &c); bool operator != (const CFraction &c); friend ostream &operator<<(ostream &out,CFraction c); friend istream &operator>>(istream &input,CFraction c); CFraction operator+(int i); CFraction operator-(int i); CFraction operator*(int i); CFraction operator/(int i); friend CFraction operator+(int i,CFraction &c); friend CFraction operator-(int i,CFraction &c); friend CFraction operator*(int i,CFraction &c); friend CFraction operator/(int i,CFraction &c); CFraction operator+(); CFraction operator-(); CFraction operator~();};CFraction CFraction::operator+(const CFraction &c){ CFraction t; int y,m,n; m=t.nume=nume*c.deno+c.nume*deno; n=t.deno=deno*c.deno; n=t.nume%t.deno; while(y) { y=n%m; n=m; m=y; } t.nume=t.nume/n; t.deno=t.deno/n; return t;}CFraction CFraction::operator-(const CFraction &c){ CFraction t; int y,m,n; m=t.nume=nume*c.deno-c.nume*deno; n=t.deno=deno*c.deno; while(y) { y=n%m; n=m; m=y; } t.nume=t.nume/n; t.deno=t.deno/n; return t;}CFraction CFraction::operator*(const CFraction &c){ CFraction t; int y,m,n; m=t.nume=nume*c.nume; n=t.deno=deno*c.deno; while(y) { y=n%m; n=m; m=y; } t.nume=t.nume/n; t.deno=t.deno/n; return t;}CFraction CFraction::operator/(const CFraction &c){ CFraction t; int y,m,n; m=t.nume=nume*c.deno; n=t.deno=deno*c.nume; while(y) { y=n%m; n=m; m=y; } t.nume=t.nume/n; t.deno=t.deno/n; return t;}bool CFraction::operator>(const CFraction &c){ double a,b; a=(double)nume/deno; b=(double)c.nume/deno; if(a>b) return true; else return false;}bool CFraction::operator<(const CFraction &c){ double a,b; a=(double)nume/deno; b=(double)c.nume/deno; if(a<b) return true; else return false;}bool CFraction::operator>=(const CFraction &c){ double a,b; a=(double)nume/deno; b=(double)c.nume/deno; if(a>=b) return true; else return false;}bool CFraction::operator<=(const CFraction &c){ double a,b; a=(double)nume/deno; b=(double)c.nume/deno; if(a<=b) return true; else return false;}bool CFraction::operator!=(const CFraction &c){ double a,b; a=(double)nume/deno; b=(double)c.nume/deno; if(a!=b) return true; else return false;}bool CFraction::operator==(const CFraction &c){ double a,b; a=(double)nume/deno; b=(double)c.nume/deno; if(a==b) return true; else return false;}ostream &operator<<(ostream &out,CFraction c){ if(c.deno==1) out<<c.nume; else out<<c.nume<<"/"<<c.deno; return out;}istream &operator>>(istream &input,CFraction c){ char a; input>>c.nume>>a>>c.deno; return input;}CFraction CFraction::operator+(int i){ CFraction c; c.deno=deno; c.nume=nume+c.deno*i; return c;}CFraction CFraction::operator-(int i){ CFraction c; c.deno=deno; c.nume=nume-c.deno*i; return c;}CFraction CFraction::operator*(int i){ CFraction c; c.deno=deno; c.nume=nume*i; return c;}CFraction CFraction::operator/(int i){ CFraction c; c.deno=deno*i; c.nume=nume; return c;}CFraction operator+(int i,CFraction &c){ CFraction a; a.deno=c.deno; a.nume=c.nume+c.deno*i; return a;}CFraction operator-(int i,CFraction &c){ CFraction a; a.deno=c.deno; a.nume=c.deno*i-c.nume; return a;}CFraction operator*(int i,CFraction &c){ CFraction a; a.deno=c.deno; a.nume=c.nume*i; return a;}CFraction operator/(int i,CFraction &c){ CFraction a; a.deno=c.nume; a.nume=c.deno*i; return a;}CFraction CFraction::operator+(){ return *this;}CFraction CFraction::operator-(){ CFraction c; c.nume=-nume; c.deno=deno; return c;}CFraction CFraction::operator~(){ CFraction c; c.nume=deno; c.deno=nume; if(c.deno==0) { cout<<"不可以取倒数!"<<endl; return *this; } else return c;}//重载函数的实现及用于测试的main()函数int main(){ CFraction a(5,6),b(2,3); cout<<"a="<<a<<" b="<<b<<endl; cout<<"a+b="<<a+b; cout<<" a-b="<<a-b; cout<<" a*b="<<a*b; cout<<" a/b="<<a/b<<endl<<endl; CFraction m(3,2),n(6,5); cout<<"m="<<m<<" n="<<n<<" a="<<a<<" b="<<b<<endl; if(m>b) cout<<"m>b "; if(b<a) cout<<"b<a "; if(m>=b) cout<<"m>=b "; if(b<=a) cout<<"b<=a "; if(m==n) cout<<"m==n "; if(n!=a) cout<<"n!=a"<<endl<<endl; cout<<"n="<<n<<" n+2="<<n+2<<endl; cout<<"n="<<n<<" n-2="<<n-2<<endl; cout<<"n="<<n<<" n*2="<<n*2<<endl; cout<<"n="<<n<<" n/2="<<n/2<<endl; cout<<"n="<<n<<" 2+n="<<2+n<<endl; cout<<"n="<<n<<" 2-n="<<2-n<<endl; cout<<"n="<<n<<" 2*n="<<2*n<<endl; cout<<"n="<<n<<" 2/n="<<2/n<<endl; cout<<"m="<<m<<" +m="<<+m<<endl; cout<<"m="<<m<<" -m="<<-m<<endl; cout<<"m="<<m<<" ~m="<<~m<<endl; return 0;}
运行结果:
0 0
- 第十三周项目 1分数类中的运算符重载
- 第十三周【项目 1分数类中的运算符重载】
- 第十三周项目1.2—分数中的运算符重载
- 第十三周项目1.3—分数中的运算符重载
- 第十三周项目1.2—分数中的运算符重载
- 第十三周项目1.3—分数中的运算符重载
- 第十三周上机时间项目——项目1-分数类中的运算符重载
- 第十三周项目1-分数类中的运算符重载——1
- 第十三周项目1-分数类中的运算符重载——2
- 第十三周项目1——分数类中的运算符重载
- 第十三周上机实践——项目1-分数类中的运算符重载
- 第十三周项目58-分数类中的运算符重载
- 第十三周项目一-分数类中的运算符重载
- 第十三周项目一-分数类中的运算符重载
- 第十三周项目:分数类中的运算符重载
- 第十三周项目1.4—分数类中的运算符重载
- 第十三周项目1.4—分数类中的运算符重载
- 第十三周项目1.4—分数类中的运算符重载
- 第十周上机时间项目——项目2—储存班长信息的学生类
- spring+springmvc+hibernate crud
- C#清除HTML标签方法汇总
- velocity 利用 HttpServletRequest 参数
- 定位
- 第十三周项目1——分数类中的运算符重载
- AFNetwork 作用和用法详解
- 临时
- ios 代理
- 微信扫码支付+Asp.Net MVC
- 第十三周项目1分数类的重载
- 一些正则
- Swift资源库--Map方法
- 第十三周项目1:阅读程序,并写出运行结果(3)纯虚函数