HM103 私有属性的读写

HM103 私有属性的读写

HM103 私有属性的读写

来源: 第 103 集 20-成员属性设置为私有

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

企业开发里通常把成员属性设为私有(private)。这样做有两点好处:

  1. 自己控制读写权限:想可读可写就同时提供 set / get;想只读就只提供 get(并给一个初值);想只写就只提供 set。类外不能直接点私有成员。
  2. 写的时候可以验证数据有效性:无效数据拒绝修改,保持原值。

请设计人类 Person,三个属性全部私有:

  • 姓名 mName(字符串):可读可写,提供 setName / getName
  • 年龄 mAge(整数):默认为 \(18\)。提供 getAge。也提供 setAge,但年龄必须在 \([0,150]\)(含端点)才写入;小于 \(0\) 或大于 \(150\) 则赋值失败,年龄不变。
  • 偶像 mIdol(字符串):只写,只提供 setIdol,不提供 getIdol

使用 string 需要包含 <string>。全程只维护**一个** Person 对象。处理 \(q\) 次操作:

  • 1 name:调用 setName,输出 OK
  • 2:调用 getName,输出当前姓名
  • 3:调用 getAge,输出当前年龄
  • 4 age:调用 setAge。成功输出 OK;失败输出两行:第一行 年龄输入有误,第二行 赋值失败
  • 5 idol:调用 setIdol,输出 OK
  • 6:试图获取偶像(没有对应接口),输出 DENIED
  • 7:试图在类外直接访问任一私有成员,输出 DENIED

保证在第一次 2 之前已经执行过 1

输入格式

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

接下来 \(q\) 行,格式见上。nameidol 不含空白,长度 \(1\sim 20\);age 为绝对值不超过 \(10^9\) 的整数。

输出格式

按操作输出,每条成功/拒绝占一行;年龄非法时占两行。行末换行。

样例

输入 #1

8
1 Zhangsan
2
3
4 160
3
4 20
3
6

输出 #1

OK
Zhangsan
18
年龄输入有误
赋值失败
18
OK
20
DENIED

输入 #2

6
1 Lisi
4 0
3
4 150
3
7

输出 #2

OK
OK
0
OK
150
DENIED

说明

  • 类外不能写 person.mName / person.mAge / person.mIdol,只能走公共接口。
  • 年龄默认 \(18\);\(0\) 和 \(150\) 合法,\(160\) 与负数非法,失败后保持原年龄。
  • 偶像只写:可以设置,不能读取。
  • 姓名同时提供 setget,即可读可写。

信息

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