HM179 类外建档
HM179 类外建档
来源: 第 179 集 模板-类模板成员函数类外实现
难度: 普及-
时间限制: 1s
空间限制: 64MB
题目描述
类模板的成员函数既可以写在类内,也可以只在类内留声明、到类外写实现。类外实现时,普通成员函数那种「类名 + ::」还不够,必须让编译器知道这是**类模板**的成员:
- 先写
template<class T1, class T2>,让编译器认识T1、T2。 - 在类名后面加上模板参数列表,再写作用域分解:
Person<T1, T2>::。可以记成「写在::前面 / 写在类名后面」。 - 即使某个成员函数(例如
showPerson)的形参列表里没有用到T1、T2,只要它属于类模板,这两步仍然都要写。
构造函数同样如此。不要把类外实现写成普通类成员的样子。
请实现类模板 Person<T1, T2>:成员 mName、mAge;构造函数与 showPerson() 必须类外实现。showPerson() 输出 姓名: 姓名 年龄: 年龄。
读入 \(n\) 个人,用 Person<string, int> 创建(必须显式指定类型),每人调用一次 showPerson(),最后输出年龄之和。
输入格式
第一行一个整数 \(n\)(\(1 \le n \le 1000\))。
接下来 \(n\) 行,每行一个不含空白的姓名和一个整数年龄。姓名长度 \(1\sim 20\),年龄为 \(1\sim 10^6\)。
输出格式
先输出 \(n\) 行档案,再输出一行整数表示年龄之和。
样例
输入 #1
2
Tom 20
Jerry 18
输出 #1
姓名:Tom 年龄:20
姓名:Jerry 年龄:18
38
输入 #2
1
Wukong 999
输出 #2
姓名:Wukong 年龄:999
999
说明
类外实现的完整形态类似:
template<class T1, class T2>
返回类型 Person<T1, T2>::函数名(...)
漏写尖括号里的 T1, T2,编译器会把它当成普通类的类外实现。
信息
- ID
- 1178
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者