问题 K: oop实习-11.运算符重载

题目描述

定义有理数类(分母不为0的分数,分子分母均为整数)Rational,实现相应操作符的重载。

(1)定义私有数据成员:分子int iUp; 分母 int iDown。

(2)定义私有成员函数:void Reduce() 和 int Gcd(int l, int r),分别用于有理数的约简和求两个整数的最大公约数。其中,在约简时需要求取分子与分母的最大公约数。

(3)定义构造函数,在构造函数体内可调用Reduce对有理数进行约简。

(4)将负号-和赋值运算符=重载为公有成员函数,分别用于求有理数的负数和赋值。

(5)将前置++、前置--、后置++、后置--重载为公有成员函数,实现有理数自增1或自减1。

(6)将+、-、*、/重载为友员函数,实现有理数的加减乘除。

(7)将<、<=、>、>=重载为友员函数,实现有理数的大小关系比较。

(8)重载流插入符<<和流提取符>>,分别用于有理数的输出和输入。其中,输出格式为“分子/分母”,若为整数,则直接输出整数。

在main函数中,根据输入的分子和分母定义两个有理数对象a和b。再定义几个有理数对象分别用于表示a和b的加、减、乘、除、前置自增a、前置自减a、后置自增a、后置自减a,并依次各个对象的结果。最后依次用<、<=、>、>=比较a和b的大小关系,并依次输出比较结果(true或false)。

输入

两个有理数a和b的的分子和分母

输出

有理数a和b的加、减、乘、除以及前置自增a、前置自减a、后置自增a、后置自减a

有理数a和b的<、<=、>、>=的结果

提示

#include <iostream>
using namespace std;class Rational{friend Rational operator+(Rational& p1, Rational& p2);friend Rational operator-(Rational& p1, Rational& p2);friend Rational operator*(Rational& p1, Rational& p2);friend Rational operator/(Rational& p1, Rational& p2);friend bool operator<(Rational& p1, Rational& p2);friend bool operator<=(Rational& p1, Rational& p2);friend bool operator>(Rational& p1, Rational& p2);friend bool operator>=(Rational& p1, Rational& p2);friend ostream& operator <<(ostream& cout, Rational& p);friend istream& operator >>(istream& cin, Rational& p);
private:int iUp;int iDown;//有理数约简void Reduce() {int t = abs(Gcd(iUp, iDown));iUp = iUp / t;iDown = iDown / t;if (iDown < 0){iDown = -iDown; iUp = -iUp; }}int Gcd(int l, int r) {int temp = l % r;while (temp != 0) {l = r;r = temp;temp = l % r;}return r;}public:Rational() {iUp = 1;iDown = 1;}Rational(int a,int b) {iUp = a;iDown = b;Reduce();}//相反数Rational operator-()  { Rational temp;temp.iUp = -iUp;temp.iDown = iDown;return temp;}//赋值    Rational& operator=(const Rational& p) {iUp = p.iUp;iDown = p.iDown;Reduce();return *this;}//前置++Rational& operator++() {iUp += iDown;Reduce();return *this;}//前置--Rational& operator--() {iUp -= iDown;return *this;}//后置++Rational operator++(int) {Rational temp = *this;iUp += iDown;return temp;}//后置--Rational operator--(int) {Rational temp = *this;iUp -= iDown;return temp;}  };
//加法+
Rational operator+(Rational& p1, Rational& p2) {Rational temp;temp.iDown = p1.iDown * p2.iDown;temp.iUp = p1.iUp * p2.iDown + p2.iUp * p1.iDown;temp.Reduce();return temp;
}
//减法-
Rational operator-(Rational& p1, Rational& p2) {Rational temp;temp.iDown = p1.iDown * p2.iDown;temp.iUp = p1.iUp * p2.iDown - p2.iUp * p1.iDown;temp.Reduce();return temp;
}
//乘法*
Rational operator*(Rational& p1, Rational& p2) {Rational temp;temp.iUp = p1.iUp * p2.iUp;temp.iDown = p1.iDown * p2.iDown;temp.Reduce();return temp;
}
//除法/
Rational operator/(Rational& p1, Rational& p2) {Rational temp;temp.iUp = p1.iUp * p2.iDown;temp.iDown = p1.iDown * p2.iUp;temp.Reduce();return temp;
}
//<号
bool operator<(Rational& p1, Rational& p2) {int temp;temp = p1.iDown * p2.iDown;p1.iDown = temp;p1.iUp += p2.iDown;p2.iDown = temp;p2.iUp += p1.iDown;p1.Reduce();p2.Reduce();if (p1.iUp < p2.iUp) {return true;}return false;
}
bool operator<=(Rational& p1, Rational& p2) {int temp;temp = p1.iDown * p2.iDown;p1.iDown = temp;p1.iUp += p2.iDown;p2.iDown = temp;p2.iUp += p1.iDown;p1.Reduce();p2.Reduce();if (p1.iUp <= p2.iUp) {return true;}return false;
}
bool operator>(Rational& p1, Rational& p2) {int temp;temp = p1.iDown * p2.iDown;p1.iDown = temp;p1.iUp += p2.iDown;p2.iDown = temp;p2.iUp += p1.iDown;p1.Reduce();p2.Reduce();if (p1.iUp > p2.iUp) {return true;}return false;
}
bool operator>=(Rational& p1, Rational& p2) {int temp;temp = p1.iDown * p2.iDown;p1.iDown = temp;p1.iUp += p2.iDown;p2.iDown = temp;p2.iUp += p1.iDown;p1.Reduce();p2.Reduce();if (p1.iUp >= p2.iUp) {return true;}return false;
}
ostream& operator <<(ostream& cout, Rational& p) {int temp;if (p.iUp % p.iDown == 0) {cout << p.iUp / p.iDown <<endl;}else {cout << p.iUp << "/" << p.iDown << endl;}return cout;
}
istream& operator >>(istream& cin, Rational& p) {cin >> p.iUp >> p.iDown;//cout << p.iUp << "/" << p.iDown << endl;return cin;
}int main()
{Rational a;Rational b;cin >> a;cin >> b;Rational c;                c = a + b;cout << "a+b: " << c ;c = a - b;cout << "a-b: " << c;c = a * b;cout << "a*b: " << c;c = a / b;cout << "a/b: " << c;c = -a;cout << "-a: " << c ;cout << "++a: " << ++a ;cout << "--a: " << --a ;c = a++;cout << "a++: " << c ;c = a--;cout << "a--: " << c ;bool d;d = (a < b);cout << "a<b: " << boolalpha << d << endl;d = (a <= b);cout << "a<=b: " << boolalpha << d<< endl;d = (a > b);cout << "a>b: " << boolalpha << d << endl;d = (a >= b);cout << "a>=b: " << boolalpha << d << endl;}

西农大 C plus相关推荐

  1. 西农计算机考研专业课压分,考研:西农大计算机初试第一名被淘汰,倒数第一成功逆袭...

    近期看了多所高校的考研录取名单,发现一个很普遍的现象,如果该校最终要刷的人是个位数,那么一般倒数第一都能逆袭成功上岸,而被淘汰掉的考生之中很大概率有初试高分者,且淘汰的原因就是面试不合格.在昨日西农大 ...

  2. 西农大许金荣课题组在小麦赤霉病研究领域取得重要突破

    背景:禾谷镰刀菌引起的小麦赤霉病是一种重要的农作物真菌病害,会造成小麦的大面积减产.此外,禾谷镰刀菌分泌的真菌毒素会在感病的小麦籽粒中累积,威胁人畜健康,造成严重的食品安全问题.禾谷镰刀菌主要在扬花期 ...

  3. 西农大 Java实习 异常处理

    实验题3 创建异常类的练习.需要使用3个Java程序来实现: Bank.java InsufficientFundsException.java ExceptionDemo.java 创建银行类Ban ...

  4. 西农大 Java 实验四 第一题

    任务一:界面设计 请设计一个界面,包括:菜单,文本框,按钮,标签,文本区,选择框,单选按钮和下拉列表. package first;import java.awt.BorderLayout; impo ...

  5. 西农计算机专业好就业么,西北农林科技大学怎么样(十大好就业专业)

    一说到西北农林科技大学,大家都是以985最末来看待,也常常被一些没进985的院校作为嘲讽对象. 说到有院校跳出来,第一个不服的就是南京农业大学和华中农业大学,对于中国农业大学的地位看来大家都不敢挑战. ...

  6. 你想要的宏基因组-微生物组知识全在这(1909)

    文章目录 征稿.转载.合作 文章分类导航目录 精选文章推荐 培训会议.招聘广告 科研经验 软件流程 扩增子分析 宏基因组分析 三代测序专题 Linux与Shell R统计绘图 实验设计与技术 基础知识 ...

  7. 你想要的宏基因组-微生物组知识全在这(1908)

    文章目录 征稿.转载.合作 文章分类导航目录 精选文章推荐 培训会议.招聘广告 科研经验 软件流程 扩增子分析 宏基因组分析 Linux与Shell R统计绘图 实验设计与技术 基础知识 作者解读 文 ...

  8. 你想要的宏基因组-微生物组知识全在这(1907)

    文章目录 征稿.转载.合作 文章分类导航目录 精选文章推荐 培训会议.招聘广告 科研经验 软件流程 扩增子分析 宏基因组分析 Linux与Shell R统计绘图 实验设计与技术 基础知识 作者解读 文 ...

  9. 国内高校简称撞车史:南大、西大、东大都在争,唯独北大没人抢

    ‍ 文章 | 募格学术 高校因简称经常发生争议,今天小编就来盘点一下.高校简称背后的"爱恨情仇",都可以拍一出大型连续剧了. 你知道你们学校的简称是啥嘛? 用官方措辞解释,高校简称 ...

最新文章

  1. Windows 10 Anaconda Python 3.7 安装 MXNet GPU版
  2. opc client for php,使用vb/vba作为OPC client
  3. WCF中NetTCp配置
  4. Vue路由及路由守卫
  5. 中国ERP软件发展趋势
  6. j2ee是什么?(1)
  7. 计算机是uefi启动 不能装win7,uefi+gpt分区安装win7图文教程 uefi加gpt模式安装win7 64位的方法...
  8. linux下使用screen和ping命令对网络质量进行监控
  9. 未来网络什么样?新华三是这么说的
  10. Java集合优雅的判空/非空
  11. 步进电机stepmotor
  12. unity 开发EasyAR发布IOS和安卓坑记录
  13. java基础之异常_繁星漫天_新浪博客
  14. 3-10月 -06摘录
  15. 金融行业用户画像六大维度
  16. 如何合理地制定项目管理计划?
  17. SQL导出数据表格怎么让列头带中文注释
  18. Python3 多线程多表入库优化
  19. pandoc把word转为html,借助pandoc将Word文档成网页
  20. vue+element-tiptap

热门文章

  1. 快捷键关闭c语言程序,C语言:VS环境下的程序快捷键大全以及Windows快捷键命令...
  2. 第10课 TCP重传技术的研究
  3. 哪个erp系统对应mysql数据库_哪些erp数据库适用于企业?
  4. 2022年软考高项-第1章选择题知识点
  5. 微信小程序 支付功能
  6. 日记之简单思考:江郎才尽(人尽其才)与思维惯性、思维干扰20121210
  7. VBA隐藏Word表格行
  8. WSL(ubuntu2204)xfce4安装中文环境和fcitx5框架及中文输入法
  9. Springboot+Mysql实现驾校课程在线预约系统源码附带运行视频
  10. 依存句法分析:原理、应用