HM116 空指针点名
HM116 空指针点名
来源: 第 116 集 类和对象-对象特性-空指针访问成员函数
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
C++ 允许用空指针调用成员函数,但函数体里是否用到 this 会决定程序安不安全。
请实现人员类型 Person,每人有一个年龄成员 mAge。它提供两个成员函数:
showClassName():函数体**不访问任何成员**(因此也不依赖this指向真实对象)。无论通过空指针还是有效指针调用,都输出一行this is a person class。showPersonAge():函数体要读取mAge。成员访问等价于this->mAge。若this为空,必须立刻返回并输出一行SAFE(拦截非法访问,保证程序不崩溃);若this非空,输出一行age = x,其中 \(x\) 是该对象的年龄。
有若干次调用。每次给出一个指针状态:0 表示空指针,正整数 \(k\) 表示指向年龄为 \(k\) 的人员对象。再给出要调用的函数种类。
输入格式
第一行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行,每行两个整数 \(p\)、\(t\)(\(p=0\) 或 \(1 \le p \le 100\);\(t \in \{1,2\}\)):
- \(p=0\):用空指针调用。
- \(p>0\):用指向年龄为 \(p\) 的对象的指针调用。
- \(t=1\):调用
showClassName。 - \(t=2\):调用
showPersonAge。
输出格式
对每次调用输出恰好一行,行末换行:
- \(t=1\):恒为
this is a person class - \(t=2\) 且 \(p=0\):
SAFE - \(t=2\) 且 \(p>0\):
age = p(age、等号、空格、整数)
样例
输入 #1
5
0 1
0 2
18 2
18 1
7 2
输出 #1
this is a person class
SAFE
age = 18
this is a person class
age = 7
输入 #2
2
0 2
0 1
输出 #2
SAFE
this is a person class
说明
- 空指针可以调用不访问成员的函数,结果与有效对象调用相同。
- 空指针访问成员会出错;本题要求在函数开头判断
this是否为空,为空则安全返回。 - 有效对象调用
showPersonAge时,输出的年龄来自该对象成员,不是写死的常数。
信息
- ID
- 1115
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者