HM175 显式建档
HM175 显式建档
来源: 第 175 集 模板-类模板与函数模板区别
难度: 普及-
时间限制: 1s
空间限制: 64MB
题目描述
类模板和函数模板声明时都很像:先写 template,后面跟函数就是函数模板,后面跟类就是类模板。二者有两点关键差别:
- 类模板**没有**自动类型推导。不能写
Person p("Wukong", 1000)让编译器去猜类型,必须显式指定,例如Person<string, int> p("Wukong", 1000)。 - 类模板的模板参数列表**可以有默认参数**。例如把年龄类型默认成
int后,Person<string> p("Bajie", 999)合法;传了第二个类型就用传入的,没传就用默认。函数模板不允许这样给类型参数写默认值。
请实现:
template<class NameType, class AgeType = int>
class Person
提供有参构造和 showPerson()(输出格式与样例一致)。
先读入 \(n\) 个人,必须用 Person<string> 创建(只写姓名类型,年龄走默认 int)。再读入 \(m\) 个人,必须用 Person<string, int> 创建(两个类型都显式写出)。每人输出一行档案,最后再输出所有人年龄之和。
输入格式
第一行两个整数 \(n, m\)(\(1 \le n, m \le 1000\))。
接下来 \(n\) 行,每行一个不含空白的姓名和一个整数年龄,对应简档(默认年龄类型)。
再接下来 \(m\) 行,格式相同,对应全档(显式两个类型)。
姓名长度 \(1\sim 20\),年龄为 \(1\sim 10^6\) 的整数。
输出格式
先输出 \(n+m\) 行档案,每行格式:
姓名: \(s\) 年龄: \(a\)
然后另起一行输出一个整数,表示这 \(n+m\) 个人的年龄之和。
样例
输入 #1
2 1
Wukong 1000
Bajie 999
Seng 18
输出 #1
姓名:Wukong 年龄:1000
姓名:Bajie 年龄:999
姓名:Seng 年龄:18
2017
输入 #2
1 1
A 1
B 2
输出 #2
姓名:A 年龄:1
姓名:B 年龄:2
3
说明
Person p(name, age) 这种自动推导在类模板上不成立,必须写尖括号。AgeType = int 只在类模板的参数列表里合法;第二组人即使年龄也是 int,也要写成 Person<string, int>,以练习显式指定。传了第二个类型就用传入的,没传就用默认。
信息
- ID
- 1174
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者