HM115 谁调用就指向谁

HM115 谁调用就指向谁

HM115 谁调用就指向谁

来源: 第 115 集 类和对象-对象特性-this指针的用途

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

非静态成员函数全程序只有一份。\(p1,p2,p3\) 都去调它时,靠 this 区分该改谁:this 指向「正在调用这个函数的那个对象」,隐含在每个非静态成员函数里,不用定义、也不用当参数传。

它有两个用途:

  1. 解决名称冲突。 形参和成员都叫 age 时,age = age; 改的是形参自己。必须写 this->age = age; 才是给成员赋值。也可以给成员改名叫 mAge,本题要求构造和赋值都用 this 区分同名。
  2. 返回对象本身。 return *this; 得到当前对象。要做 p2.add(p1).add(p1).add(p1) 这种链式调用,返回类型必须是 Person &。若按值返回 Person,每次都会拷出新对象,后面的 .add 加在副本上,原来的 \(p2\) 只会被第一次调用改到。

先读入 \(n\) 个人的初始年龄并构造出来(构造里必须用 this->age = age)。再处理 \(q\) 次操作。人员编号从 \(1\) 开始。

输入格式

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

第二行 \(n\) 个整数,第 \(i\) 个数是编号 \(i\) 的初始年龄(绝对值不超过 \(10^4\))。

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

接下来 \(q\) 行:

  • 1 i x:编号 \(i\) 调用 setAge(x),函数形参也叫 age,必须用 this 写入
  • 2 i j k:编号 \(i\) 按引用链式吸收编号 \(j\) 的年龄,共 \(k\) 次(\(1 \le k \le 100\))
  • 3 i j k:同样链式吸收 \(k\) 次,但 addAge 按值返回
  • 4 i:查询编号 \(i\) 的当前年龄

输出格式

每个操作输出一行一个整数:

  • 1 / 4:该人当前年龄
  • 2 / 3:链式调用结束后,编号 \(i\) 自己的年龄(不是副本的年龄)

行末换行。

样例

输入 #1

2
10 10
4
2 2 1 3
4 2
1 1 18
4 1

输出 #1

40
40
18
18

输入 #2

2
10 10
2
3 2 1 3
4 2

输出 #2

20
20

说明

  • 样例 #1:\(p2\) 自己 \(10\) 岁,再按引用连加三次 \(p1\) 的 \(10\) 岁,得到 \(40\)。
  • 样例 #2:按值返回时只有第一次加在 \(p2\) 上,后面两次加在临时副本上,\(p2\) 停在 \(20\)。
  • this 不用传;*this 才是对象本体。

信息

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