HM129 对象里到底有谁
HM129 对象里到底有谁
来源: 第 129 集 类和对象-继承-继承中的对象模型
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
派生类会把基类里**所有非静态成员属性**都继承下来,自己的非静态成员也属于这个对象。静态成员不属于任何一个对象,所有对象共享一份,不要算进对象模型。
请定义基类 Base 与公有继承它的 Son:
Base有公共mA、保护mB、私有mC,以及静态mS(类内声明、类外初始化)。Son另有公共mD。
因此一个 Son 对象上有四份非静态数据:A、B、C、D。其中 C 确实被继承了,只是被编译器隐藏,派生类里访问会编译失败。不要用 sizeof 的字节数来答题(不同平台可能补齐),要按「几个非静态成员」来理解对象模型。
读入这五个值(四个非静态和一个静态)和若干询问。能访问的成员输出数值;私有基类成员输出 HIDDEN;询问对象里有几份非静态成员时输出 4。
输入格式
第一行五个整数 \(a\)、\(b\)、\(c\)、\(d\)、\(s\)(\(1 \le a,b,c,d,s \le 10^9\)),依次写入 mA、mB、mC、mD、mS。
第二行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行,每行一个单词:
A:在派生类成员函数里读公共的mAB:在派生类成员函数里读保护的mBC:询问私有的mC(派生类访问不到)D:读派生类自己的mDS:通过类名读静态mS(不属于对象)N:输出该对象包含的非静态成员个数
输出格式
每个询问一行:
ABDS:对应整数C:HIDDENN:4
行末换行。A、B、D 必须从对象成员读出,S 必须从静态成员读出。
样例
输入 #1
1 2 3 4 100
6
A
B
C
D
S
N
输出 #1
1
2
HIDDEN
4
100
4
输入 #2
10 20 30 40 7
2
N
S
输出 #2
4
7
说明
- 有人以为对象只有自己的
D(算 1 个),或只算能访问的A、B、D(算 3 个)。正确是 4 个:私有的C也被继承,只是访问不到。 - 静态
mS不占对象模型,所以N永远是4。 - 不要输出
sizeof的字节数。
信息
- ID
- 1128
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者