HM117 常字只读

HM117 常字只读

HM117 常字只读

来源: 第 117 集 类和对象-对象特性-const修饰成员函数

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

成员函数右括号后面加上 const,这个函数就叫**常函数**。this 的本质是指针常量,相当于 Person * const this:指针指向不能改。再在函数后面加 const,等于把 this 加成 const Person * const this,连指向的值也不能改,所以常函数里不能给普通成员赋值。

若某个成员特别声明为 mutable,则它在常函数里仍然可以改。

在对象前面加 const 得到**常对象**。常对象不能改普通成员,但可以改 mutable 成员。常对象只能调用常函数:普通成员函数里可以改属性,会破坏常对象的只读约定。

请实现 Person:普通成员 mAmutable 成员 mB、常函数 showPerson、普通函数 func。开始时用同一组初值构造一个非常对象和一个常对象。处理 \(q\) 次操作。

输入格式

第一行两个整数 \(a\)、\(b\)(绝对值不超过 \(10^9\)),分别是 mAmB 的初值。

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

接下来 \(q\) 行:

  • 1 v:非常对象调用 showPerson:不能改 mA,把 mB 写成 \(v\),输出这两个成员
  • 2 v:非常对象调用 func,把 mA 写成 \(v\)
  • 3 v:常对象试图把 mA 写成 \(v\)
  • 4 v:常对象把 mutablemB 写成 \(v\)
  • 5:常对象调用 showPerson
  • 6:常对象调用 func

输出格式

  • 1:一行两个整数,当前非常对象的 mAmB
  • 2:一行一个整数,非常对象的 mA
  • 3 / 6DENIED
  • 4:一行一个整数,常对象当前的 mB
  • 5OK

行末换行。

样例

输入 #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
通过率
?
上传者