HM177 三种传参窗
HM177 三种传参窗
来源: 第 177 集 模板-类模板对象做函数参数
难度: 普及-
时间限制: 1s
空间限制: 64MB
题目描述
类模板可以实例化出对象,这个对象也能当作函数参数。常见有三种写法:
- 指定传入类型:参数写成
Person<string, int> &p,把模板参数列表写死。最常用,直截了当。 - 参数模板化:把
string、int再变成T1、T2,函数本身是函数模板:template<class T1, class T2> void f(Person<T1, T2> &p)。这是类模板配合函数模板。 - 整个类模板化:参数写成一个
T,由编译器把整个Person<string, int>推导成T:template<class T> void f(T &p)。
三种都要会;实际开发里用得最多的是第一种。可以用 typeid(T).name() 查看推导出的类型名,但类型名字符串依赖编译器,本题不要求输出它。
请实现类模板 Person<T1, T2>(成员姓名、年龄,有参构造,showPerson() 输出 姓名: 姓名 年龄: 年龄),以及三个打印函数 printPerson1、printPerson2、printPerson3,分别对应上述三种传参。每个函数先输出一行通道号 way:k,再调用 showPerson()。
读入 \(n\) 个人,每人指定通道 \(k\in\{1,2,3\}\),按通道调用对应函数。必须真正写出三种函数,不能只用一种应付。
输入格式
第一行一个整数 \(n\)(\(1 \le n \le 1000\))。
接下来 \(n\) 行,每行:整数 \(k\)、不含空白的姓名 \(s\)、整数年龄 \(a\)。\(k \in \{1,2,3\}\),姓名长度 \(1\sim 20\),\(1 \le a \le 10^6\)。
输出格式
每人两行:第一行 way: 与通道号(无空格),第二行 姓名: 姓名 年龄: 年龄。
样例
输入 #1
3
1 Wukong 100
2 Bajie 90
3 Seng 30
输出 #1
way:1
姓名:Wukong 年龄:100
way:2
姓名:Bajie 年龄:90
way:3
姓名:Seng 年龄:30
输入 #2
1
1 Tom 20
输出 #2
way:1
姓名:Tom 年龄:20
说明
创建对象必须写成 Person<string, int> p(...),类模板没有自动类型推导。第一种传参最常用;第二、三种都是函数模板配合类模板,一般不必写得这么绕,但本题都要会。
信息
- ID
- 1176
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者