HM117 常字只读
HM117 常字只读
来源: 第 117 集 类和对象-对象特性-const修饰成员函数
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
成员函数右括号后面加上 const,这个函数就叫**常函数**。this 的本质是指针常量,相当于 Person * const this:指针指向不能改。再在函数后面加 const,等于把 this 加成 const Person * const this,连指向的值也不能改,所以常函数里不能给普通成员赋值。
若某个成员特别声明为 mutable,则它在常函数里仍然可以改。
在对象前面加 const 得到**常对象**。常对象不能改普通成员,但可以改 mutable 成员。常对象只能调用常函数:普通成员函数里可以改属性,会破坏常对象的只读约定。
请实现 Person:普通成员 mA、mutable 成员 mB、常函数 showPerson、普通函数 func。开始时用同一组初值构造一个非常对象和一个常对象。处理 \(q\) 次操作。
输入格式
第一行两个整数 \(a\)、\(b\)(绝对值不超过 \(10^9\)),分别是 mA、mB 的初值。
第二行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行:
1 v:非常对象调用showPerson:不能改mA,把mB写成 \(v\),输出这两个成员2 v:非常对象调用func,把mA写成 \(v\)3 v:常对象试图把mA写成 \(v\)4 v:常对象把mutable的mB写成 \(v\)5:常对象调用showPerson6:常对象调用func
输出格式
1:一行两个整数,当前非常对象的mA和mB2:一行一个整数,非常对象的mA3/6:DENIED4:一行一个整数,常对象当前的mB5:OK
行末换行。
样例
输入 #1
0 0
6
1 100
2 50
3 7
4 80
5
6
输出 #1
0 100
50
DENIED
80
OK
DENIED
输入 #2
3 4
2
1 9
4 6
输出 #2
3 9
6
说明
- 常函数后面的
const修饰的是this,不是随便找个位置加。 mutable在常函数和常对象上都可以改。- 常对象调用普通函数是违法的,即使函数体暂时没写赋值也不行。
信息
- ID
- 1116
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者