HM123 自制整数加减一
HM123 自制整数加减一
来源: 第 123 集 类和对象-C++运算符重载-递增运算符重载
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
内置整数的前置 ++a 是先加一再取表达式的值;后置 a++ 是先取当前值再加一。自定义类型要模仿这套语义,必须分别重载前置和后置递增。递减同理,只是把加一改成减一。
请实现自制整数 MyInteger:
- 内部用私有整数
mNumber保存当前值,构造时写入给定初值。 - 重载全局左移运算符(友元)以便
cout << 对象,直接打出内部整数。 - 前置递增
operator++():先把内部值加一,再返回自身的**引用**。返回引用是为了链式++(++x)始终作用在同一对象上;若返回值,第二次加一会打在临时副本上,原对象只加一次。 - 后置递增
operator++(int):int只是占位参数,用来和前置区分(返回值不能作为重载条件;必须写int,写double无效)。先记下当前对象,再让自身加一,最后**按值**返回记下的副本。后置不能返回引用,否则会引用即将销毁的局部对象。 - 前置递减 / 后置递减 规则与上面相同,只是把加一改成减一。前置减减返回引用,后置减减带
int占位并返回值。
读入初值和若干操作。对每个操作输出「表达式的值」以及操作结束后对象的值。
输入格式
第一行一个整数 \(x\)(\(-10^9 \le x \le 10^9\)),表示自制整数的初值。
第二行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行,每行一个操作名:
PRE:计算++xPOST:计算x++CPRE:计算++(++x)(连续前置,必须走引用返回)DPRE:计算--xDPOST:计算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
- 通过率
- ?
- 上传者