HM131 同名成员怎么找

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:输出子类对象直接访问的 mA
  • BA:输出 Base::mA
  • F:调用子类 func()
  • BF:调用 Base::func()
  • BFI x:调用 Base::func(x)(\(1 \le x \le 10^9\))

输出格式

对每个询问输出一行,行末换行:

  • A:一个整数,子类的 mA
  • BA:一个整数,基类的 mA
  • FSon func
  • BFBase func
  • BFI xBase 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
通过率
?
上传者