HM132 同名静态成员

HM132 同名静态成员

HM132 同名静态成员

来源: 第 132 集 类和对象-继承-同名静态成员处理

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

静态成员:所有对象共享一份数据,编译期分配内存,类内声明、类外初始化。静态成员函数只能访问静态成员。继承里出现同名静态成员时,处理方式和同名非静态成员一样——直接访问是子类自己的,看父类要加作用域。

不同的是静态成员有两种访问途径:通过对象,以及通过类名。通过子类类名去看父类那一份,要写两个作用域:Son::Base::mA。第一个 :: 表示「用类名访问」,第二个 :: 表示「进入父类作用域」。

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

  • 两边都有静态整数 mA,类外分别初始化为给定的基类值、派生类值。
  • 两边都有静态函数 func()。基类另外重载 func(int)
  • 子类一旦出现同名静态函数,会隐藏父类所有同名函数(含重载)。因此 Son::func(x) 非法,必须写成 Son::Base::func(x)对象.Base::func(x)

读入两份初值和若干询问,分别用「对象访问」和「类名访问」输出对应静态成员。

输入格式

第一行两个整数 \(a\)、\(b\)(\(1 \le a,b \le 10^9\)),依次是 Base::mASon::mA 的类外初值。

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

接下来 \(q\) 行,每行一种询问:

  • OA:对象访问子类 mA
  • OBA:对象加作用域访问 Base::mA
  • CA:类名 Son::mA
  • CBA:类名 Son::Base::mA
  • OF:对象调用子类 func()
  • OBF:对象调用 Base::func()
  • CF:类名 Son::func()
  • CBF:类名 Son::Base::func()
  • CBFI x:类名调用被隐藏的 Base::func(x)(\(1 \le x \le 10^9\))

输出格式

每个询问一行,行末换行:

  • OA CA:派生类静态值
  • OBA CBA:基类静态值
  • OF CFSon func
  • OBF CBFBase func
  • CBFI xBase func x

样例

输入 #1

100 200
9
OA
OBA
CA
CBA
OF
OBF
CF
CBF
CBFI 100

输出 #1

200
100
200
100
Son func
Base func
Son func
Base func
Base func 100

输入 #2

1 2
2
CBA
CBFI 7

输出 #2

1
Base func 7

说明

  • 同名静态成员的处理与非静态相同:直接找自己,加 Base:: 找父类。
  • Son::Base::mA 的两个 :: 含义不同:先按类名访问,再进入父类作用域。
  • 子类同名静态函数会隐藏父类全部重载,有参版本必须加父类作用域。
  • 静态成员必须类外初始化,所有对象共享同一份。

信息

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