题目描述

定义有理数类(分母不为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的<、<=、>、>=的结果

样例输入

4 3 3 2

样例输出

a+b: 17/6

a-b: -1/6

a*b: 2

a/b: 8/9

-a: -4/3

++a: 7/3

--a: 4/3

a++: 4/3

a--: 7/3

a<b: true

a<=b: true

a>b: false

a>=b: false


#include <iostream>
#include <cmath>
using namespace std;class Rational
{
private:int iUp,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 a,int b){int r=a%b;while(r!=0){a=b; b=r; r=a%b;}return b;}
public:Rational(){}Rational(int a,int b){iUp=a; iDown=b;Reduce();}Rational& operator=(const Rational& a){iUp=a.iUp;iDown=a.iDown;Reduce();return *this;}Rational operator-(){Rational t;t.iUp=-iUp;t.iDown=iDown;return t;}Rational& operator++();Rational operator++(int);Rational& operator--();Rational operator--(int);friend Rational operator+(const Rational&,const Rational&);friend Rational operator-(const Rational&,const Rational&);friend Rational operator*(const Rational&,const Rational&);friend Rational operator/(const Rational&,const Rational&);friend bool operator<(const Rational&,const Rational&);friend bool operator<=(const Rational&,const Rational&);friend bool operator>(const Rational&,const Rational&);friend bool operator>=(const Rational&,const Rational&);friend ostream& operator<<(ostream& out,const Rational&);friend istream& operator>>(istream& in,Rational&);
};Rational& Rational::operator++()
{iUp=iUp+iDown;return *this;
}
Rational Rational::operator++(int)
{Rational temp(iUp,iDown);iUp=iUp+iDown;return temp;
}
Rational& Rational::operator--()
{iUp=iUp-iDown;return *this;
}
Rational Rational::operator--(int)
{Rational temp(iUp,iDown);iUp=iUp-iDown;return temp;
}
Rational operator+(const Rational& a,const Rational& b)
{Rational t;t.iUp = a.iUp*b.iDown + b.iUp*a.iDown;t.iDown = a.iDown * b.iDown;return t;}
Rational operator-(const Rational& a,const Rational& b)
{Rational t;t.iUp = a.iUp*b.iDown - b.iUp*a.iDown;t.iDown = a.iDown * b.iDown;return t;
}
Rational operator*(const Rational& a,const Rational& b)
{Rational t;t.iUp = a.iUp * b.iUp;t.iDown = a.iDown * b.iDown;return t;
}
Rational operator/(const Rational& a,const Rational& b)
{Rational t;t.iUp = a.iUp * b.iDown;t.iDown = a.iDown * b.iUp;return t;
}
bool operator<(const Rational&a,const Rational&b)
{return( a.iUp/(double)a.iDown < b.iUp/(double)b.iDown );
}
bool operator<=(const Rational&a,const Rational&b)
{return( a.iUp/(double)a.iDown <= b.iUp/(double)b.iDown );
}
bool operator>(const Rational&a,const Rational&b)
{return( a.iUp/(double)a.iDown > b.iUp/(double)b.iDown );
}
bool operator>=(const Rational&a,const Rational&b)
{return( a.iUp/(double)a.iDown >= b.iUp/(double)b.iDown );
}
ostream& operator<<(ostream& out,const Rational&a)
{if(a.iUp%a.iDown!=0)out<<a.iUp<<"/"<<a.iDown;else out<<(a.iUp/a.iDown);return out;
}
istream& operator>>(istream& in,Rational&a)
{in>>a.iUp>>a.iDown;return in;
}int main()
{Rational a,b;cin>>a>>b;Rational c;c=a+b;cout<<"a+b: "<<c<<endl;c=a-b;cout<<"a-b: "<<c<<endl;c=a*b;cout<<"a*b: "<<c<<endl;c=a/b;cout<<"a/b: "<<c<<endl;c=-a;cout<<"-a: "<<c<<endl;c=++a;cout<<"++a: "<<c<<endl;c=--a;cout<<"--a: "<<c<<endl;c=a++;cout<<"a++: "<<c<<endl;c=a--;cout<<"a--: "<<c<<endl;bool x;x=a<b;cout<<"a<b: "<<boolalpha<<x<<endl;x=a<=b;cout<<"a<=b: "<<x<<endl;x=a>b;cout<<"a>b: "<<x<<endl;x=a>=b;cout<<"a>=b: "<<x<<endl;return 0;
}

问题 K: oop实习-11.运算符重载相关推荐

  1. 第11章 运算符重载与约定

    第11章 运算符重载与约定 我们在<第2章 Kotlin 语法基础>中已经学习过关于运算符的相关内容,本章将继续深入探讨Kotlin中的运算符的重载与约定. 通常一门编程语言中都会内置预定 ...

  2. c++第八周【任务1-1】实现复数类中的运算符重载

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: c++第八周 ...

  3. python 运算符重载_零基础小白Python入门必看:面向对象之典型魔术方法

    魔术方法 查看类的魔术方法 class A: passdir(A) # 可以得到类所有公有成员复制代码 输出结果如下 ['__class__', '__delattr__', '__dict__', ...

  4. python代码案例详解-Python运算符重载详解及实例代码

    Python运算符重载 Python语言提供了运算符重载功能,增强了语言的灵活性,这一点与C++有点类似又有些不同.鉴于它的特殊性,今天就来讨论一下Python运算符重载. Python语言本身提供了 ...

  5. C++加法运算符重载

    在oop的思想指导下,类的定义一般放在.h头文件中,类的实现则是放在.cpp文件(包含对应的.h文件)中,最后在包含主调用方法的main.cpp中include"xxxx.h" 其 ...

  6. c++重载(以运算符重载为主)

    重载(OverLoading)是面向对象程序设计多态性的一种体现.所谓重载,是指"同一标识符"在同一作用域的不同场合具有不同的语义,这个标识符可以是函数名或运算符.也就是说,重载可 ...

  7. C++中的运算符重载

    1.Cpp中的重载运算符和重载函数 C++允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载.重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但 ...

  8. C++——运算符重载operator

    C++--运算符重载operator C++ prime plus第11章,运算符重载是C++的一种多态.运算符重载格式如下: operator运算符(argument-list) 1.做普通函数重载 ...

  9. 第十二周项目二-Time类中的运算符重载

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月24日*版 本 号:v1. ...

最新文章

  1. IOS10 APP安装后打开不提示是否允许使用数据
  2. 收集Cocos2d提供的字体!共57种
  3. C++中getline()函数
  4. 【WP 8.1开发】解决摄像头翻转问题(RuntimeApp篇)
  5. python如何引发和处理异常_在python3.6中,如何捕捉异常并引发异常以便稍后处理?...
  6. 《大数据》2020年第3期目次摘要
  7. 与其临渊羡鱼,不如退而结网
  8. 探讨专线与家用宽带的区别
  9. 【数据结构】线性表之链式线性表
  10. c语言随机抽号小程序源代码,使用JS编写的随机抽取号码的小程序
  11. android x86玩和平精英,和平精英iOS和安卓可以一起玩吗 和平精英iOS和安卓数据互通吗...
  12. 被称为海淀妈妈四大神器之一的倾听者K3 硬件拆解
  13. 买书问题的动态规划实现
  14. 成长与直面: ORID见感思行教练法
  15. 云服务器-华为云服务器ECS挂载对象存储服务OBS教程
  16. 一个BUG引发的灾难:ORA-00600 [kjmchkiseq:!seq]
  17. 微信JSSDK invalid signature签名错误的解决方法
  18. Thinkphp内核开发盲盒商城源码v2.0 对接易支付/阿里云短信/七牛云存储
  19. Web(ics-07)
  20. 春风十里不如Node中的一股清流

热门文章

  1. 全国计算机等级考试一级试题2,全国计算机等级考试一级考试练习(新大纲)试题及答案(二)...
  2. vue实现后台实时编辑预览页面,小程序端展示
  3. Linux内核模块反编译,内核oops错误调试学习笔记
  4. PS_高低频和中性灰——双曲线
  5. 科技早闻:传科比将成苹果iWatch代言人
  6. C语言程序设计--体测成绩信息管理系统
  7. 小米手机html无法播放本地视频教程,小米VR正式版怎么看本地视频?小米VR看第三方视频方法教程...
  8. 开源文档管理系统LetoDMS的安装和汉化
  9. 【冰糖Python】numpy:上三角矩阵 下三角矩阵 numpy.triu() numpy.triu_indices() numpy.tril() numpy.tril_indices()
  10. virtualBox上搭建X86双机VSU