第13周实践项目1分数类中的运算符重载(3)
2016-05-25 19:30
190 查看
/* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称 : *作 者 : 刘云 *完成日期 : 2016年5月25号 *版 本 号 : v6.0 * *问题描述 : 定义分数的一目运算+和-,分别代表分数取正和求反,将“按位取反运算符”~重载为分数的求倒数运算。 *输入描述 : 无 *程序输出 : */ //(3) #include<iostream> using namespace std; class CFraction { private: int nume; //分子 int deno; //分母 public: CFraction(int n=1,int d=1):nume(n),deno(d){} //类与类的加、减、乘、除运算 CFraction operator+(CFraction &c1); CFraction operator-(CFraction &c1); CFraction operator*(CFraction &c1); CFraction operator/(CFraction &c1); //类与数的加、减、乘、除运算 CFraction operator+(int a); CFraction operator-(int a); CFraction operator*(int a); CFraction operator/(int a); friend CFraction operator+(int a,CFraction &c1); friend CFraction operator-(int a,CFraction &c1); friend CFraction operator*(int a,CFraction &c1); friend CFraction operator/(int a,CFraction &c1); //类的比较运算 friend int operator>(CFraction &c1,CFraction &c2); //类的取正取反运算 CFraction &operator+(); CFraction &operator-(); void qualify(); void show()const; }; //类与类的加、减、乘、除运算 CFraction CFraction::operator+(CFraction &c1) { return CFraction(c1.deno*nume+c1.nume*deno,deno*c1.deno); } CFraction CFraction::operator-(CFraction &c1) { return CFraction(c1.deno*nume-c1.nume*deno,deno*c1.deno); } CFraction CFraction::operator*(CFraction &c1) { return CFraction(nume*c1.nume,deno*c1.deno); } CFraction CFraction::operator/(CFraction &c1) { return CFraction(nume*c1.deno,deno*c1.nume); } //类与数的加、减、乘、除运算 CFraction CFraction::operator+(int a) { return CFraction(a*deno+nume,deno); } CFraction CFraction::operator-(int a) { return CFraction(nume-a*deno,deno); } CFraction CFraction::operator*(int a) { return CFraction(nume*a,deno); } CFraction CFraction::operator/(int a) { return CFraction(nume,deno*a); } //类与数的加、减、乘、除运算,运算符合交换律 CFraction operator+(int a,CFraction &c1) { return CFraction(a*c1.deno+c1.nume,c1.deno); } CFraction operator-(int a,CFraction &c1) { return CFraction(a*c1.deno-c1.nume,c1.deno); } CFraction operator*(int a,CFraction &c1) { return CFraction(c1.nume*a,c1.deno); } CFraction operator/(int a,CFraction &c1) { return CFraction(c1.deno*a,c1.nume); } //类的取正取反运算 CFraction &CFraction::operator+() { nume=nume; deno=deno; return *this; } CFraction &CFraction::operator-() { int n=nume; nume=deno; deno=n; return *this; } int operator>(CFraction &c1,CFraction &c2) { if(c1.deno!=c2.deno) { if(c1.deno>c2.deno) return 0; else return 1; } if(c1.deno==c2.deno) { if(c1.nume>c2.nume) return 1; else return 0; } } void CFraction::qualify() { int k=1,n=nume,d=deno; while(deno!=0) { k=nume%deno; nume=deno; deno=k; } n=n/nume; d=d/nume; nume=n; deno=d; } void CFraction::show()const { if(deno==1) cout<<nume<<endl; else cout<<nume<<'/'<<deno<<endl; } int main() { CFraction c1(1,2),c2(1,4),c3,a(1,3); int i=2; c3=c1+c2; c3.qualify(); cout<<"(1/2)+(1/4)="; c3.show(); c3=c1-c2; c3.qualify(); cout<<"(1/2)-(1/4)="; c3.show(); c3=c1*c2; c3.qualify(); cout<<"(1/2)*(1/4)="; c3.show(); c3=c1/c2; c3.qualify(); cout<<"(1/2)/(1/4)="; c3.show(); c3=a+i; c3.qualify(); cout<<"(1/3)+2="; c3.show(); c3=i+a; c3.qualify(); cout<<"2+(1/3)="; c3.show(); c3=45+a; c3.qualify(); cout<<"45+(1/3)="; c3.show(); c3=a*27; c3.qualify(); cout<<"(1/3)*27="; c3.show(); c3=5/a; c3.qualify(); cout<<"5/(1/3)="; c3.show(); if(c1>c2)cout<<"(1/2)>(1/4)"<<endl; else cout<<"(1/2)<(1/4)"<<endl; +c1; c1.show(); -c1; c1.show(); return 0; }
运行结果:
相关文章推荐
- 面向对象的数据结构--栈和队列
- gdb调试malloc-free 产生的coredown
- [Codeforces297C]Splitting the Uniqueness(构造)
- ps实现半色调图像防伪
- Linux历史
- netty 二进制简单通信
- C++作业6
- Android图像处理(二) 画画板
- 安装 spring tool suit
- mysql 5.7安装遇到的问题记录
- 2016.13周 周练 C - Joysticks 【CF】
- 勿躁(2006-08-24)
- 2.5 使用scriptfiles
- cassandra eclipse 环境构建
- cassandra eclipse 环境构建
- 线程与进程
- some links
- 二、Quartz任务调度--集群
- Effective Java 英文 第二版 读书笔记 Item 7:Avoid finalizers
- Java enum的用法详解