HM133 多继承同名二义
HM133 多继承同名二义
来源: 第 133 集 类和对象-继承-继承语法
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
C++ 允许一个类同时继承多个基类:写完第一个「继承方式 + 基类」后,用逗号再写下一组,第三、第四个基类也按同样方式追加。语法形如:
class 派生类 : 继承方式 基类1, 继承方式 基类2, 继承方式 基类3
派生类对象会带上每个基类里的非静态成员,再加上自己的非静态成员。不要用 sizeof 的字节数答题(平台可能补齐),按「有几份非静态成员」理解即可。
请按下面定义,且必须真的写成多继承,不能把数据全塞进一个类:
Base1:公有整数mABase2:公有整数mA(与Base1同名)Base3:公有整数mE(名字不冲突)Son:公有继承上述三个基类,自己还有公有整数mC、mD
两个基类都有 mA 时,对子类对象直接写 son.mA 会产生**二义性**(不明确:到底是第一个父亲的,还是第二个父亲的)。要看清是哪一份,必须加作用域:son.Base1::mA、son.Base2::mA。不冲突的成员(mC、mD、mE)可以直接访问。
实际开发里不太建议多用继承:不同人写的基类很容易撞名,撞名后每次访问都得加作用域。本题仍要求掌握语法。
读入五份初值和若干询问,按询问输出对应成员或判定。
输入格式
第一行五个整数 \(a_1\)、\(a_2\)、\(c\)、\(d\)、\(e\)(\(1 \le a_1,a_2,c,d,e \le 10^9\)),依次写入 Base1::mA、Base2::mA、Son::mC、Son::mD、Base3::mE。
第二行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行,每行一个单词:
C:直接访问子类自己的mCD:直接访问子类自己的mDE:直接访问从Base3继承、名字不冲突的mEB1A:加作用域访问Base1::mAB2A:加作用域访问Base2::mAA:询问「不写作用域直接访问mA」的结果N:输出该对象包含的非静态成员个数
输出格式
每个询问一行,行末换行:
CDEB1AB2A:对应整数,必须从多继承对象的成员读出A:AMBIGUOUSN:5
样例
输入 #1
100 200 300 400 500
7
B1A
B2A
C
D
E
A
N
输出 #1
100
200
300
400
500
AMBIGUOUS
5
输入 #2
1 2 3 4 9
3
A
E
B2A
输出 #2
AMBIGUOUS
9
2
说明
- 样例 #1 对应课堂上的 \(100/200/300/400\),并补上第三个基类的 \(500\)。
N永远是 \(5\):两份同名的mA、一份mE、子类自己的mC和mD。两份mA都在对象里,只是直接点名会二义。- 不要输出
sizeof的字节数。 mE可以不写作用域;mA必须写Base1::或Base2::。
信息
- ID
- 1132
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者