HM178 模板族谱

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。子类还可以再写 T3T4 等更多参数。

请实现:

  1. 类模板 Base<T>:公有成员 m,类型为 T
  2. 普通子类 Son:公有继承 Base<int>(父类类型写死为 int)。
  3. 类模板子类 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 把父类钉成 intSon2 用第二个模板参数把类型传给父类,才能在创建对象时再决定父类成员的类型。

信息

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