HM113 一份数据两种叫法

HM113 一份数据两种叫法

HM113 一份数据两种叫法

来源: 第 113 集 30&31 类和对象-静态成员

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

成员前面加上 static 就变成静态成员。静态成员不属于某一个对象,分静态成员变量和静态成员函数两类。

静态成员变量有三条性质:

  1. 所有对象共享同一份数据。甲改成 \(200\),乙再读也是 \(200\)。
  2. 编译阶段就在全局区分配内存,不是创建对象时才分配。
  3. 必须**类内声明、类外初始化**,写成 int Person::mA = 100;。类外不要再写 static,但要加作用域。

它有两种访问方式:通过对象 p.mA,或通过类名 Person::mA。它也有访问权限:写在 private 里的静态变量,类外用对象或类名都读不到。

静态成员函数同样被所有对象共享,也可以用对象或类名调用。它**只能访问静态成员变量**,不能访问非静态成员:函数体里分不清要改的是哪个对象的那份数据。私有静态成员函数类外也调不到。

请实现 Person:公有静态整数 mA(类外初值 \(100\))、非静态整数 mB、公有静态函数 func(只能改 mA)、私有静态整数 mC(类外初值 \(200\))、私有静态函数 func2。处理 \(q\) 次操作。

输入格式

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

接下来 \(q\) 行,每行一个操作(\( |v| \le 10^9\)):

  • 1:用对象读取 mA
  • 2:用类名读取 mA
  • 3 v:对象 \(p2\) 把 mA 写成 \(v\),再用另一个对象 \(p1\) 读出来
  • 4 v:用类名把 mA 写成 \(v\),再用对象读出来
  • 5:类外访问私有静态变量 mC
  • 6 v:用对象调用 func,把 mA 写成 \(v\)
  • 7 v:用类名调用 func,把 mA 写成 \(v\)
  • 8:静态函数试图改非静态 mB
  • 9:类外调用私有静态函数 func2

输出格式

  • 1OBJ x
  • 2CLASS x
  • 3SHARE x
  • 4CLASS_SET x
  • 5 / 8 / 9DENIED
  • 6FUNC_OBJ x
  • 7FUNC_CLASS x

其中 \(x\) 为当前共享的 mA。行末换行。

样例

输入 #1

9
1
2
3 200
4 300
5
6 400
7 500
8
9

输出 #1

OBJ 100
CLASS 100
SHARE 200
CLASS_SET 300
DENIED
FUNC_OBJ 400
FUNC_CLASS 500
DENIED
DENIED

输入 #2

3
2
3 0
1

输出 #2

CLASS 100
SHARE 0
OBJ 0

说明

  • mA 的初值必须写在类外;不初始化就无法解析这份外部数据。
  • 一个对象改 mA,另一个对象读到的是同一份。
  • 静态函数可以改 mA,但不能改 mB
  • 私有静态成员无论变量还是函数,类外都访问不到。

信息

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