第九周 项目3-分数类中的运算符重载(1)
来源:互联网 发布:进化论不能 知乎 编辑:程序博客网 时间:2024/06/08 06:13
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:呼亚萍 * 完成日期:2015年5月13日 * 版 本 号:v1.0 * * 问题描述: 定义分数的一目运算+和-,分别代表分数取正和求反,将“按位取反运算符”~重载为分数的求倒数运算。 * 程序输入:相应的程序 * 程序输出:对应得结果 */#include <iostream>#include <cstdlib>using namespace std;class CFraction{public: CFraction(int nu=0,int de=1); CFraction operator+(const CFraction &c); void simplify(); 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); CFraction operator-(); CFraction operator+(); CFraction operator~(); void display();private: int nume;//分子 int deno;//分母};CFraction::CFraction(int nu,int de){ if(de==0) { cout<<"初始化失败,分子不能为0"; exit(0); } else { nume=nu; deno=de; }}void CFraction::simplify(){ int a=nume,b=deno,c; while(b!=0) { c=a%b; a=b; b=c; } nume=nume/a; deno=deno/a; if((deno<0)&&(nume<0)) { deno*=(-1); nume*=(-1); } if((deno<0)&&(nume>0)) { deno*=(-1); nume*=(-1); }}CFraction CFraction:: operator+(){ return *this;}CFraction CFraction::operator-(){ CFraction c; c.nume=-nume; c.deno=deno; return c;}CFraction CFraction:: operator~(){ CFraction c; c.deno=nume; c.nume=deno; return c;}CFraction CFraction::operator+(const CFraction &c){ CFraction m; m.deno=deno*c.deno; m.nume=nume*c.deno+c.nume*deno; m.simplify(); return m;}CFraction CFraction::operator-(const CFraction &c){ CFraction m; m.deno=deno*c.deno; m.nume=nume*c.deno-c.nume*deno; m.simplify(); return m;}CFraction CFraction::operator*(const CFraction &c){ CFraction m; m.nume=nume*c.nume; m.deno=deno*c.deno; m.simplify(); return m;}CFraction CFraction::operator/(const CFraction &c){ CFraction m; if(!c.nume)return *this; m.nume=nume*c.deno; m.deno=deno*c.nume; m.simplify(); return m;}bool CFraction::operator>(const CFraction &c){ int this_nume,c_nume,common_deno; this_nume=nume*c.deno; // 计算分数通分后的分子,同分母为deno*c.deno c_nume=c.nume*deno; common_deno=deno*c.deno; if ((this_nume>c_nume&&common_deno>0)||(this_nume<c_nume&&common_deno<0)) return true; // 将通分后的分子比较大小 return false;}bool CFraction::operator<(const CFraction &c){ int this_nume,c_nume,common_deno; this_nume=nume*c.deno; c_nume=c.nume*deno; common_deno=deno*c.deno; if ((this_nume-c_nume)*common_deno<0) return true; return false;}bool CFraction::operator>=(const CFraction &c){ if(*this<c) return false; else return true;}bool CFraction::operator<=(const CFraction &c){ if(*this>c) return false; else return true;}bool CFraction::operator==(const CFraction &c){ if(*this>c||*this<c) return false; else return true;}bool CFraction::operator!=(const CFraction &c){ if(*this==c) return false; else return true;}void CFraction::display(){ if(nume==deno) cout<<"1"<<endl; else cout<<"("<<nume<<"/"<<deno<<")"<<endl;}int main(){ CFraction c1(1,3),c2(-5,10),s; cout<<"c1=1/3"<<'\t'<<"c2=-5/10"<<endl; s=c1+c2; cout<<"c1+c2="; s.display(); s=c1-c2; cout<<"c1-c2="; s.display(); s=c1*c2; cout<<"c1*c2="; s.display(); s=c1/c2; cout<<"c1/c2="; s.display(); s=-c1; cout<<"-c1="; s.simplify(); s.display(); s=+c2; cout<<"+c2="; s.simplify(); s.display(); s=~c1; cout<<"c1的倒数为:"; s.simplify(); s.display(); s=~c2; cout<<"c2的倒数为:"; s.simplify(); s.display(); if(c1>c2) cout<<"c1>c2"<<endl; if(c1<c2) cout<<"c1<c2"<<endl; if(c1<=c2) cout<<"c1<=c2"<<endl; if(c1>=c2) cout<<"c1>=c2"<<endl; if(c1!=c2) cout<<"c1!=c2"<<endl; if(c1==c2) cout<<"c1=c2"<<endl; return 0;}
运算结果:
知识点总结:
一目运算符的重载
学习心得:
在实践中会遇到不同的问题,一一解决,加油!
0 0
- 第九周--项目3-分数类中的运算符重载
- 第九周项目3(1)-分数类中的运算符重载(续)
- 第九周 项目3-分数类中的运算符重载(1)
- 第九周项目3(2)-分数类中的运算符重载(续)
- 第九周上机实践项目3——分数类中的运算符重载(续)
- 第九周项目3——分数类中的运算符重载(续)
- 第九周 项目3 分数类中的运算符重载(续)
- 第九周 【项目3-分数类中的运算符重载(续)】
- 第九周【项目3-分数类中的运算符重载(续)】
- 第九周 项目3-分数类中的运算符重载(续)
- 第九周 项目3-分数类中的运算符重载(2)
- 第九周项目3——分数类中的运算符重载(续)
- 第九周项目3-分数类中的运算符重载(续)
- 第九周项目3--分数类中的运算符重载(续)
- 第九周项目3-分数类中的运算符重载(续)
- 第九周上机项目3 分数类中的运算符重载(续)
- 第九周项目3-分数类中的运算符重载(续)
- 第九周项目3:分数类中的运算符重载(续)
- ubuntu下使用源码安装apache 服务器
- 作业4.17
- 数据库在qt中的使用
- remote debugger使用
- JAVA多线程
- 第九周 项目3-分数类中的运算符重载(1)
- DTD:文档类型定义(Document Type Definition)实例
- webview加载html优化
- mysql show processlist 命令详解
- android 实现阻尼效果
- java中关于栈、堆、常量池介绍和关于String类的理解
- How To Set Up an OpenVPN Server on Ubuntu 14.04
- quartz实现定时功能实例详解(servlet定时器配置方法)
- jquery中的ready函数与window.onload谁先执行