HM115 谁调用就指向谁
HM115 谁调用就指向谁
来源: 第 115 集 类和对象-对象特性-this指针的用途
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
非静态成员函数全程序只有一份。\(p1,p2,p3\) 都去调它时,靠 this 区分该改谁:this 指向「正在调用这个函数的那个对象」,隐含在每个非静态成员函数里,不用定义、也不用当参数传。
它有两个用途:
- 解决名称冲突。 形参和成员都叫
age时,age = age;改的是形参自己。必须写this->age = age;才是给成员赋值。也可以给成员改名叫mAge,本题要求构造和赋值都用this区分同名。 - 返回对象本身。
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
- 通过率
- ?
- 上传者