第九周上机实践项目3-分数类中的运算符重载(续 重载输入输出流)
来源:互联网 发布:非法网络渗透罪 编辑:程序博客网 时间:2024/05/22 00:21
在分数类中的运算符重载基础上
(1)定义分数的一目运算+和-,分别代表分数取正和求反,将“按位取反运算符”~重载为分数的求倒数运算。
(2)定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
/* *Copyright (c) 2014,烟台大学计算机学院 *All rights reserved. *文件名称: test.cpp *作 者:满星辰 *完成日期:2015 年 5 月 8日 *版本号:v1.0 */#include <iostream>#include <cstdlib>using namespace std;int gcd(int x,int y){ int r; while(y!=0) { r=x%y; x=y; y=r; } return x;}class CFraction{private: int nume; // 分子 int deno; // 分母public: CFraction(int nu=0,int de=1); //构造函数,初始化用 void set(int nu=0,int de=1); //置值,改变值时用 void input(); //按照"nu/de"的格式,如"5/2"的形式输入 void simplify(); //化简(使分子分母没有公因子) void amplify(int n); //放大n倍,如2/3放大5倍为10/3 //输出:以8/6为例,style为0时,原样输出8/6; //style为1时,输出化简后形式4/3; //style为2时,输出1(1/3)形式,表示一又三分之一; //style为3时,用小数形式输出,如1.3333; //默认方式0 bool operator > (CFraction &f); bool operator < (CFraction &f); bool operator >= (CFraction &f); bool operator <= (CFraction &f); bool operator == (CFraction &f); bool operator != (CFraction &f); CFraction operator+(CFraction &f); CFraction operator-(CFraction &f); CFraction operator*(CFraction &f); CFraction operator/(CFraction &f); CFraction operator+();//一目运算取正 CFraction operator-();//一目运算求反 CFraction operator~();//求倒数 friend istream &operator>>(istream &input,CFraction &c);//输入分数 friend ostream &operator<<(ostream &out,CFraction &c);//输出分数};int main(){ CFraction f1,f2,f3,f4; cout<<"输入f1的值:"; cin>>f1; cout<<"输入f2的值:"; cin>>f2; cout<<"输入f3的值:"; cin>>f3; cout<<"f1是否比f3大?"; cout<<((f1>f3)?"是":"否")<<endl; cout<<"f1是否比f2小?"; cout<<((f1<f2)?"是":"否")<<endl; cout<<"f1是否大于或等于f2?"; cout<<((f1>=f2)?"是":"否")<<endl; cout<<"f1是否小于或等于f3?"; cout<<((f1<=f3)?"是":"否")<<endl; cout<<"f1是否等于f3?"; cout<<((f1==f3)?"是":"否")<<endl; cout<<"f1是否不等于f2?"; cout<<((f1!=f2)?"是":"否")<<endl; cout<<f1<<"+"<<f2<<"="; f4=f1+f2; cout<<f4<<endl; cout<<f1<<"-"<<f2<<"="; f4=f1-f2; cout<<f4<<endl; cout<<f1<<"*"<<f2<<"="; f4=f1*f2; cout<<f4<<endl; cout<<f1<<"/"<<f2<<"="; f4=f1/f2; cout<<f4<<endl; cout<<"+f3="; f4=+f3; cout<<f4<<endl; cout<<"-f3="; f4=-f3; cout<<f4<<endl; cout<<"~f3(取倒数)="; f4=+f3; cout<<f4<<endl; return 0;}CFraction::CFraction(int nu,int de)//初始化只在声明时用{ if(de!=0)//忘记分母不能为零这回事了。。。 { nume=nu; deno=de; } else { cout<<"error!"<<endl; exit(0);//退出需要用头文件#include <cstdlib> }}void CFraction::set(int nu,int de){ if(de!=0) { nume=nu; deno=de; } else { cout<<"error!"<<endl; exit(0);//退出需要用头文件#include <cstdlib> } return;}void CFraction::simplify(){ int x,y,r; x=nume; y=deno; while(y!=0) { r=x%y; x=y; y=r; } nume/=x; deno/=x; return;}void CFraction::amplify(int n){ nume*=n; return;}bool CFraction::operator > (CFraction &f){ return (nume/deno>f.nume/f.deno);}bool CFraction::operator < (CFraction &f){ return (nume/deno<f.nume/f.deno);}bool CFraction::operator >= (CFraction &f){ return !(nume/deno<f.nume/f.deno);}bool CFraction::operator <= (CFraction &f){ return !(nume/deno>f.nume/f.deno);}bool CFraction::operator == (CFraction &f){ return (nume/deno==f.nume/f.deno);}bool CFraction::operator != (CFraction &f){ return (nume/deno!=f.nume/f.deno);}CFraction CFraction::operator+(CFraction &f){ CFraction f1; int mgy=gcd(deno,f.deno); f1.deno=deno*f.deno/mgy; f1.nume=f.deno/mgy*nume+deno/mgy*f.nume; f1.simplify(); return f1;}CFraction CFraction::operator-(CFraction &f){ CFraction f1(-f.nume,f.deno),f2; (*this+f1).simplify(); return (*this+f1);}CFraction CFraction::operator*(CFraction &f){ CFraction f1; f1.nume=nume*f.nume; f1.deno=deno*f.deno; f1.simplify(); return f1;}CFraction CFraction::operator/(CFraction &f){ CFraction f1(f.deno,f.nume); (*this*f1).simplify(); return (*this*f1);}CFraction CFraction::operator+()//一目运算取正{ return *this;}CFraction CFraction::operator-()//一目运算求反{ CFraction c(-nume,deno); return c;}CFraction CFraction::operator~()//求倒数{ CFraction c(deno,nume); if(nume==0) cout<<"error!"<<endl; else return c;}istream &operator>>(istream &input,CFraction &c)//输入分数{ char ch; while(1) { input>>c.nume>>ch>>c.deno; if(ch!='/') { cout<<"input error!"<<endl; } else if(c.deno==0) { cout<<"deno can't be 0!"<<endl; } else break; } return input;}ostream &operator<<(ostream &out,CFraction &c)//输出分数{ if((c.nume>0&&c.deno>0)||(c.nume<0&&c.deno>0)) cout<<c.nume<<"/"<<c.deno; else if(c.nume>0&&c.deno<0) { cout<<-c.nume<<"/"<<-c.deno; } else { cout<<-c.nume<<"/"<<-c.deno; } return cout;}
图片:
心得:
记得课件上的 ostream&后面跟的是output呀,怎么这次用output做不出来了。。。换成out就可以了。。。
所以说这只是个符号吗o(╯□╰)o
0 0
- 第九周上机实践项目3-分数类中的运算符重载(续 重载输入输出流)
- 第九周上机实践项目3——分数类中的运算符重载(续)
- 第九周上机项目3 分数类中的运算符重载(续)
- 第九周上机实践项目1-复数类中的运算符重载(续 输出流运算符重载)
- 第九周 课后实践:项目三——分数类中的运算符重载(续)
- 第八周上机实践项目3——分数类中的运算符重载(2)
- 第九周项目三——分数类中的运算符重载(利用输入输出运算符重载)
- 第九周上机实践项目2-Time类中的运算符重载(续)
- 第九周上机实践项目1——复数类中的运算符重载(续)
- 第九周上机实践项目2——Time类中的运算符重载(续)
- 第八周上机实践项目3-分数类中的运算符重载(分数与分数、分数与整数)
- 第九周--项目3-分数类中的运算符重载
- 第十三周上机实践项目1(3):分数中的运算符重载
- 第十三周上机实践项目1(1):分数类中的运算符重载
- 第十三周上机实践项目1(2):分数类中的运算符重载
- 第十三周上机实践项目1(4):分数类中的运算符重载
- 第九周项目3(1)-分数类中的运算符重载(续)
- 第九周项目3(2)-分数类中的运算符重载(续)
- 第26讲-项目一-投票表决器
- HTML5中缓存技术
- 数据库系统——B+树索引
- linux下环境变量的使用
- SQL Server T-SQL高级查询
- 第九周上机实践项目3-分数类中的运算符重载(续 重载输入输出流)
- mptcp 软路由minifw5.0
- 《剑指Offer》学习笔记--面试题15:链表中倒数第k个结点
- MFC CArchive 使用实例 文件保存与读取
- 数据库系统——基于索引的存储结构
- codeforces #298题解
- SQL Server Transact-SQL 编程
- 用div模拟textart显示图片
- 设置Enter键为默认键