HM175 显式建档

HM175 显式建档

HM175 显式建档

来源: 第 175 集 模板-类模板与函数模板区别

难度: 普及-

时间限制: 1s

空间限制: 64MB

题目描述

类模板和函数模板声明时都很像:先写 template,后面跟函数就是函数模板,后面跟类就是类模板。二者有两点关键差别:

  1. 类模板**没有**自动类型推导。不能写 Person p("Wukong", 1000) 让编译器去猜类型,必须显式指定,例如 Person<string, int> p("Wukong", 1000)
  2. 类模板的模板参数列表**可以有默认参数**。例如把年龄类型默认成 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
通过率
?
上传者