第九周 任务三
2012-04-14 22:28
239 查看
/* 实验内容:定义分数类中<<和>>运算符重载 * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: 定义分数类中<<和>>运算符重载 * 作 者: 薛广晨 * 完成日期: 2012 年 4 月 14 日 * 版 本号: x1.0 */ //【任务3】接第8周任务3,定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。 #include<iostream> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu = 0, int de = 1) : nume(nu), deno(de){}; //构造函数,初始化用 void output1(); friend ostream& operator << (ostream &,CFraction &); friend istream& operator >> (istream &,CFraction &); CFraction operator+(CFraction &c1); CFraction operator-(CFraction &c1); CFraction operator*(CFraction &c1); CFraction operator/(CFraction &c1); CFraction operator-();//取反 //比较运算符(二目)的重载 bool operator > (CFraction &c1); bool operator < (CFraction &c1); bool operator >= (CFraction &c1); bool operator <= (CFraction &c1); bool operator == (CFraction &c1); bool operator != (CFraction &c1); }; ostream& operator << (ostream &ouput, CFraction &c) { int i; if(c.deno == 0) cout<<"error"<<endl; if(c.nume >= 0) { if(c.deno < c.nume)i = c.deno; else i = c.nume; for(; i > 0; --i) { if(c.nume % i == 0 && c.deno % i == 0) { c.nume = c.nume / i; c.deno = c.deno / i; break; } } ouput << c.nume << "/" << c.deno << endl; } else { c.nume = -c.nume; if(c.deno < c.nume)i = c.deno; else i = c.nume; for(; i > 0; --i) { if(c.nume % i == 0 && c.deno % i == 0) { c.nume = c.nume / i; c.deno = c.deno / i; break; } } ouput << -c.nume << "/" << c.deno << endl; } return ouput; } istream& operator >> (istream &input, CFraction &c) { char c1; cout << "请输入一个分数(格式:x/y):"; input >> c.nume >> c1 >> c.deno; do { if(c1 == '/')break; else { cout << "格式错误,请重新输入一个分数(格式:x/y):"; input >> c.nume >> c1 >> c.deno; } }while(1); return input; } CFraction CFraction :: operator+(CFraction &c1) { CFraction c2; c2.deno = deno * c1.deno; c2.nume = nume * c1.deno + c1.nume * deno; return c2; } CFraction CFraction :: operator-(CFraction &c1) { CFraction c2; c2.deno = deno * c1.deno; c2.nume = nume * c1.deno - c1.nume * deno; return c2; } CFraction CFraction :: operator*(CFraction &c1) { CFraction c2; c2.deno = deno * c1.deno; c2.nume = nume * c1.nume; return c2; } CFraction CFraction :: operator/(CFraction &c1) { CFraction c2; c2.deno = deno * c1.nume; c2.nume = nume * c1.deno; return c2; } CFraction CFraction :: operator-()//取反 { CFraction c2; c2.nume = -nume; c2.deno = deno; return c2; } void CFraction :: output1() { cout << nume << "/" << deno << endl; } //比较运算符(二目)的重载 bool CFraction :: operator > (CFraction &c1) { CFraction c2, c3; c2.nume = nume * c1.deno; c3.nume = c1.nume * deno; if(c2.nume > c3.nume)return true; else return false; } bool CFraction :: operator < (CFraction &c1) { CFraction c2, c3; c2.nume = nume * c1.deno; c3.nume = c1.nume * deno; if(c2.nume < c3.nume)return true; else return false; } bool CFraction :: operator >= (CFraction &c1) { CFraction c2, c3; c2.nume = nume * c1.deno; c3.nume = c1.nume * deno; if(c2.nume < c3.nume)return false; else return true; } bool CFraction :: operator <= (CFraction &c1) { CFraction c2, c3; c2.nume = nume * c1.deno; c3.nume = c1.nume * deno; if(c2.nume > c3.nume)return false; else return true; } bool CFraction :: operator == (CFraction &c1) { CFraction c2, c3; c2.nume = nume * c1.deno; c3.nume = c1.nume * deno; if((c2.nume >= c3.nume) && (c2.nume <= c3.nume))return true; else return false; } bool CFraction :: operator != (CFraction &c1) { CFraction c2, c3; c2.nume = nume * c1.deno; c3.nume = c1.nume * deno; if((c2.nume > c3.nume) || (c2.nume < c3.nume))return true; else return false; } void main() { CFraction c1, c2, c3; cin >> c1 >> c2; cout <<"c1 = "; c1.output1(); cout <<"c2 = "; c2.output1(); c3 = c1 + c2; cout << "c1 + c2 = " << c3; c3 = c1 - c2; cout << "c1 - c2 = " << c3; c3 = c1 * c2; cout << "c1 * c2 = " << c3; c3 = c1 / c2; cout << "c1 / c2 = " << c3; c3 = -c1; cout << "-c1 = " << c3; cout << endl; cout<<"下面比较两个分数的大小:\n"; 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; cout<<endl; system("pause"); }
上机感言:感觉挺爽的,可以直接输入与输出
相关文章推荐
- C++ 第九周任务-个人所得税计算器
- 第九周上机任务四--本月有几天
- C++程序设计实验报告(五十九)---第九周任务3
- 《第九周实验报告任务1》
- 《第九周任务三》定义分数类中《和》运算符重载,实现分数的输入输出,改造源程序中对运算结果显示方式,使程序读起来更自然
- 第九周上机任务2
- 第九周任务三
- 第九周上机任务
- 第九周 任务二
- C++第九周【任务二】定义Time类中的<<和>>运算符重载,实现时间的输入输出
- 第九周实验报告任务5 设计一元一次方程类,求形如ax+b=0的方程的解。
- 第九周任务5
- 第九周任务四:建立二维数组类
- 第九周任务2
- 第九周任务三之流运算符的重载
- 第九周项目六 委派任务
- C#--第九周实验--任务1--定义一个静态成员方法,该方法用于提取文件名。
- C#上机 第九周 任务1 用于提取文件名
- C++ 第九周任务-分段函数求值
- C++ 第九周任务-个人所得税计算器(switch语句)