HM180 同册模板档
HM180 同册模板档
来源: 第 180 集 模板-类模板分文件编写
难度: 普及-
时间限制: 1s
空间限制: 64MB
题目描述
普通类常把声明放进 .h、实现放进 .cpp。类模板这样拆会在**链接期**报「无法解析的外部符号」:类模板的成员函数在调用时才创建,只 #include 头文件时编译器看不到 .cpp 里的实现,也就不会实例化那些成员,链接时找不到构造函数和普通成员。
两种解决办法:
- 直接
#include源文件(.cpp)。能过,但很少这么做——通常只让别人看头文件,不直接包含源码。 - 主流做法:声明和实现写在同一个文件里,后缀改成
.hpp(约定俗成,不是语法强制)。别人一看.hpp就知道这是类模板。
本题按第二种:把 Person 的声明与类外实现写在同一翻译单元中(模拟 .hpp),不要拆成「只声明、实现去另一份 cpp」。
类模板 Person<T1, T2>:成员姓名、年龄;构造函数与 showPerson()、getAge() 均类外实现。showPerson() 输出 姓名: 姓名 年龄: 年龄。
读入 \(n\) 个人,用 Person<string, int> 创建并展示,最后输出年龄之和(通过 getAge() 累加)。
输入格式
第一行一个整数 \(n\)(\(1 \le n \le 1000\))。
接下来 \(n\) 行,每行一个不含空白的姓名和一个整数年龄。姓名长度 \(1\sim 20\),年龄为 \(1\sim 10^6\)。
输出格式
先输出 \(n\) 行档案,再输出一行整数表示年龄之和。
样例
输入 #1
1
Jerry 18
输出 #1
姓名:Jerry 年龄:18
18
输入 #2
2
Tom 20
Anna 21
输出 #2
姓名:Tom 年龄:20
姓名:Anna 年龄:21
41
说明
链接失败的根因是成员函数创建时机在调用阶段。本题单文件评测,等价于把 .h 与 .cpp 合并成一份 .hpp 再包含进来。不要只写声明却把实现「假装」丢到别处。
信息
- ID
- 1179
- 难度
- 9
- 分类
- (无)
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 通过率
- 100%
- 上传者