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::mA、Son::mA 的类外初值。
第二行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行,每行一种询问:
OA:对象访问子类mAOBA:对象加作用域访问Base::mACA:类名Son::mACBA:类名Son::Base::mAOF:对象调用子类func()OBF:对象调用Base::func()CF:类名Son::func()CBF:类名Son::Base::func()CBFI x:类名调用被隐藏的Base::func(x)(\(1 \le x \le 10^9\))
输出格式
每个询问一行,行末换行:
OACA:派生类静态值OBACBA:基类静态值OFCF:Son funcOBFCBF:Base funcCBFI x:Base 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
- 通过率
- ?
- 上传者