HM178 模板族谱
HM178 模板族谱
来源: 第 178 集 模板-类模板与继承
难度: 普及-
时间限制: 1s
空间限制: 64MB
题目描述
父类若是类模板,子类声明时**必须指定父类的类型参数**,否则无法继承:编译器算不出父类成员占多少内存,也就没法给子类分配空间。写成 class Son : public Base 会报缺少模板参数列表;应写成 class Son : public Base<int>。
若希望父类的 T 能灵活变化,子类自己也要变成类模板,再把类型参数传给父类。例如:
template<class T1, class T2>
class Son2 : public Base<T2>
创建 Son2<int, char> s 时,T1 给子类自己的成员,T2 交给父类,父类成员 m 的类型就是 char。子类还可以再写 T3、T4 等更多参数。
请实现:
- 类模板
Base<T>:公有成员m,类型为T。 - 普通子类
Son:公有继承Base<int>(父类类型写死为int)。 - 类模板子类
Son2<T1, T2>:公有继承Base<T2>,另有成员obj,类型为T1。
处理询问:
- 操作 \(1\):构造
Son,把父类m设为整数 \(x\),输出son:\(x\)。 - 操作 \(2\):构造
Son2<int, char>,obj为整数 \(a\),父类m为字符 \(c\),输出son2:\(a\) 与 \(c\)(中间一个空格)。
输入格式
第一行一个整数 \(q\)(\(1 \le q \le 1000\))。
接下来 \(q\) 行:
1 x:\(x\) 为整数,\(\lvert x\rvert \le 10^9\)。2 a c:\(a\) 为整数,\(\lvert a\rvert \le 10^9\);\(c\) 为可见非空白字符。
输出格式
每个操作一行。
样例
输入 #1
3
1 8
2 3 A
1 -1
输出 #1
son:8
son2:3 A
son:-1
输入 #2
1
2 0 z
输出 #2
son2:0 z
说明
不指定父类模板参数就无法继承。Son 把父类钉成 int;Son2 用第二个模板参数把类型传给父类,才能在创建对象时再决定父类成员的类型。
信息
- ID
- 1177
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者