HM131 同名成员怎么找
HM131 同名成员怎么找
来源: 第 131 集 类和对象-继承-同名成员处理
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
子类会继承父类的数据。若两边出现**同名成员**,通过子类对象访问时要分清找谁。
请定义基类 Base 与公有继承它的派生类 Son,并按下面规则处理同名成员。
同名成员属性
Base有公有整数mA,构造时写成给定的基类初值。Son也有公有整数mA,构造时写成给定的派生类初值(与基类不同)。- 通过子类对象**直接**访问
mA,得到的是子类自己的那份。 - 若要拿到父类里继承下来的那份同名属性,必须加父类作用域:
对象.Base::mA。
同名成员函数
Base提供两个同名函数(同一作用域下的重载):无参func()以及func(int x)。Son只提供无参func()。- 通过子类对象直接写
func(),调用的是子类版本。 - 调用父类同名函数必须加作用域:
对象.Base::func()、对象.Base::func(x)。 - 关键隐藏规则:子类一旦出现与父类同名的成员函数,会**隐藏父类中所有同名函数**(含全部重载版本)。因此
对象.func(x)不能用来调用父类的有参版本,即使参数对得上也不行,必须写成对象.Base::func(x)。
读入两份初值和若干询问,按询问输出对应成员的值或函数提示。
输入格式
第一行两个整数 \(a\)、\(b\)(\(1 \le a,b \le 10^9\)),依次是基类 mA 的初值和派生类 mA 的初值。
第二行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行,每行一种询问:
A:输出子类对象直接访问的mABA:输出Base::mAF:调用子类func()BF:调用Base::func()BFI x:调用Base::func(x)(\(1 \le x \le 10^9\))
输出格式
对每个询问输出一行,行末换行:
A:一个整数,子类的mABA:一个整数,基类的mAF:Son funcBF:Base funcBFI x:Base func x(中间一个空格)
样例
输入 #1
100 200
5
A
BA
F
BF
BFI 100
输出 #1
200
100
Son func
Base func
Base func 100
输入 #2
1 2
3
BA
A
BFI 7
输出 #2
1
2
Base func 7
说明
- 直接访问同名成员一定是子类自己的;要看父类必须加
Base::。 - 子类的
func会把父类所有叫func的重载一并隐藏。有参版本只能通过Base::func(x)调用。 - 样例 #1:基类属性 \(100\)、派生类属性 \(200\),并分别调用无参、有参两种父类函数。
信息
- ID
- 1130
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者