HM129 对象里到底有谁

HM129 对象里到底有谁

HM129 对象里到底有谁

来源: 第 129 集 类和对象-继承-继承中的对象模型

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

派生类会把基类里**所有非静态成员属性**都继承下来,自己的非静态成员也属于这个对象。静态成员不属于任何一个对象,所有对象共享一份,不要算进对象模型。

请定义基类 Base 与公有继承它的 Son

  • Base 有公共 mA、保护 mB、私有 mC,以及静态 mS(类内声明、类外初始化)。
  • Son 另有公共 mD

因此一个 Son 对象上有四份非静态数据:ABCD。其中 C 确实被继承了,只是被编译器隐藏,派生类里访问会编译失败。不要用 sizeof 的字节数来答题(不同平台可能补齐),要按「几个非静态成员」来理解对象模型。

读入这五个值(四个非静态和一个静态)和若干询问。能访问的成员输出数值;私有基类成员输出 HIDDEN;询问对象里有几份非静态成员时输出 4

输入格式

第一行五个整数 \(a\)、\(b\)、\(c\)、\(d\)、\(s\)(\(1 \le a,b,c,d,s \le 10^9\)),依次写入 mAmBmCmDmS

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

接下来 \(q\) 行,每行一个单词:

  • A:在派生类成员函数里读公共的 mA
  • B:在派生类成员函数里读保护的 mB
  • C:询问私有的 mC(派生类访问不到)
  • D:读派生类自己的 mD
  • S:通过类名读静态 mS(不属于对象)
  • N:输出该对象包含的非静态成员个数

输出格式

每个询问一行:

  • A B D S:对应整数
  • CHIDDEN
  • N4

行末换行。ABD 必须从对象成员读出,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 个),或只算能访问的 ABD(算 3 个)。正确是 4 个:私有的 C 也被继承,只是访问不到。
  • 静态 mS 不占对象模型,所以 N 永远是 4
  • 不要输出 sizeof 的字节数。

信息

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