HM114 只有普通成员算在对象上
HM114 只有普通成员算在对象上
来源: 第 114 集 类和对象-对象特性-成员变量和成员函数分开存储
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
封装把属性和行为看成一个整体,但它们在对象模型里是分开存的。结论只有一句:**只有非静态成员变量属于类的对象**;静态成员变量、静态成员函数、非静态成员函数都不属于某一个对象,各自在全程序里只有一份。
空类实例化出来的空对象也要占一块独一无二的位置,否则两个空对象会叠在同一处。本题用「占用单元」计数,不考察某个类型占几个字节:
- 一个非静态成员变量都没有时,占用单元为 \(1\)(占位)。
- 一旦有了 \(k\) 个非静态成员变量,占用单元就是 \(k\)(不再额外加那个空对象占位)。
静态成员变量必须类内声明、类外初始化,并且所有对象共享同一份,可以用对象或类名访问。
处理 \(q\) 次操作。
输入格式
第一行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行,每行一个操作(\( |v| \le 10^9\),\(0 \le k \le 1000\)):
0:空类占用单元1 k:有 \(k\) 个非静态整型成员时的占用单元2 x:询问第 \(x\) 种成员是否属于对象。\(x=1\) 非静态成员变量,\(x=2\) 静态成员变量,\(x=3\) 非静态成员函数,\(x=4\) 静态成员函数3:创建两个空对象,判断它们是否占不同位置4 v:把共享的静态成员Demo::mB写成 \(v\)5:另造一个Demo对象读mB
输出格式
0/1:一行一个整数,即占用单元2:\(x=1\) 输出BELONG,否则输出NO3:DISTINCT4:一行一个整数 \(v\)5:SHARE v(\(v\) 为当前静态成员的值)
行末换行。
样例
输入 #1
9
0
1 0
1 1
1 3
2 1
2 2
2 3
2 4
3
输出 #1
1
1
1
3
BELONG
NO
NO
NO
DISTINCT
输入 #2
3
4 200
5
4 0
输出 #2
200
SHARE 200
0
说明
- 空对象占 \(1\) 个单元,是为了让每个空对象都有独一无二的地址。
- 有了非静态成员之后,按成员个数计数,不要再加 \(1\)。
- 静态成员不属于对象,但所有对象看到的是同一份数据。
- 不要输出
sizeof的具体字节数。
信息
- ID
- 1113
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者