HM123 自制整数加减一

HM123 自制整数加减一

HM123 自制整数加减一

来源: 第 123 集 类和对象-C++运算符重载-递增运算符重载

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

内置整数的前置 ++a 是先加一再取表达式的值;后置 a++ 是先取当前值再加一。自定义类型要模仿这套语义,必须分别重载前置和后置递增。递减同理,只是把加一改成减一。

请实现自制整数 MyInteger

  1. 内部用私有整数 mNumber 保存当前值,构造时写入给定初值。
  2. 重载全局左移运算符(友元)以便 cout << 对象,直接打出内部整数。
  3. 前置递增 operator++():先把内部值加一,再返回自身的**引用**。返回引用是为了链式 ++(++x) 始终作用在同一对象上;若返回值,第二次加一会打在临时副本上,原对象只加一次。
  4. 后置递增 operator++(int)int 只是占位参数,用来和前置区分(返回值不能作为重载条件;必须写 int,写 double 无效)。先记下当前对象,再让自身加一,最后**按值**返回记下的副本。后置不能返回引用,否则会引用即将销毁的局部对象。
  5. 前置递减 / 后置递减 规则与上面相同,只是把加一改成减一。前置减减返回引用,后置减减带 int 占位并返回值。

读入初值和若干操作。对每个操作输出「表达式的值」以及操作结束后对象的值。

输入格式

第一行一个整数 \(x\)(\(-10^9 \le x \le 10^9\)),表示自制整数的初值。

第二行一个整数 \(q\)(\(1 \le q \le 1000\))。

接下来 \(q\) 行,每行一个操作名:

  • PRE:计算 ++x
  • POST:计算 x++
  • CPRE:计算 ++(++x)(连续前置,必须走引用返回)
  • DPRE:计算 --x
  • DPOST:计算 x--
  • PRINT:只查看当前对象,不修改

过程中内部值始终在 int 范围内。

输出格式

每个操作输出一行两个整数,用单个空格隔开:表达式的值、操作后对象的值。PRINT 的表达式值和对象值相同。行末换行。

样例

输入 #1

0
5
PRE
POST
PRINT
CPRE
DPOST

输出 #1

1 1
1 2
2 2
4 4
4 3

输入 #2

10
3
DPRE
POST
CPRE

输出 #2

9 9
9 10
12 12

说明

  • 前置返回引用、后置返回值,且后置必须用 int 占位参数。
  • 样例 #1:从 \(0\) 前置得到 \(1\);再后置表达式仍为 \(1\)、对象变成 \(2\);++(++x) 连加两次得到 \(4\);后置递减表达式为 \(4\)、对象变成 \(3\)。
  • 必须用重载后的 ++ / -- 修改内部整数,不能另写一套加减应付输出。

信息

ID
1122
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者