- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
包含编译模式 包含编译模式的缺点 函数体中描述的是实现细节,现在将函数定义和成员函数的定义都放在头文件中,不能隐藏这些细节 在多个文件中包含相同的函数模板定义和类模板定义会增加不必要的编译时间 分离编译模式 分离编译模式 函数模板的声明放在头文件中,定义放在源文件中 类模板的声明放在头文件中,而成员函数和静态数据成员的定义被放在源文件中 代码组织方式 模板代码的组织方式,与非模板代码的组织方式相同 要用export关键字将模板声明为可导出的 分离编译模式 //smodel.h //只提供函数模板的声明 template class Type max(Type x, Type y); //smodel.cpp //提供函数模板的实现 export template class Type max(Type x, Type y) { /* … */ } //客户代码中只需要包含头文件就可以使用模板了 #include “smodel.h” … min(a, b); 分离编译模式 /*可导出的类模板在声明或定义时在template关键字前加上export*/ //queue.h export template class Type class Queue{…}; //queue.cpp /*在模板的实现文件中,成员函数的定义也自动被声明为可导出的*/ #include “queue.h” //…模板类成员函数的定义 分离编译模式 可导出的类模板在声明或定义时在template关键字前加上export 在实现文件中,成员函数的定义也自动被声明为可导出的 可以将类模板的部分成员声明为可导出的 关键字export不是在类模板上指定,而是在导出的成员函数定义上指定 没有指定export的成员定义也必须和类定义一起放在头文件中 分离编译模式 分离编译模式的优点 能够将函数模板的接口同其实现分离 缺点 由于分离编译模式需要更复杂的程序设计环境,所以它们不能在所有的C++编译器实现中提供 并不是所有的编译器都支持分离模式,即使支持也未必能很好地支持 小结 模板是重用代码的一种机制,利用模板可以进行与类型无关的通用型程序设计 函数模板可以实现通用算法 类模板可以定义通用的数据结构 STL(标准模板库)提供了标准容器、迭代器和算法,以支持通用程序设计 上机作业1:函数模板 编写一个通用函数swapt,实现两个相同类型变量的交换 编写模板函数,注意其编译方式和文件组织方式 STL中已有函数模板swap,注意不要同名,否则被认为是重载std::swap,调用时会引起二义性 模板定义出现在头文件中,export关键字不支持 注意避免模板定义的多次包含引起重复定义 编写main函数测试该函数模板 使用多种数据类型 上机作业2:类模板 将单链表类SList改写为模板类SListT 将SList类的完整定义写入头文件slist.h中 注意牵涉到类名字的地方都要做相应的修改 Node类要也定义为模板 Node类中如果有friend声明,也要修改 类外定义的成员函数要修改 涉及链表元素的数据类型的地方要修改 int改为模板参数 修改原SList的测试程序,测试模板类是否能够正常工作 用多种数据类型测试 OOP Using C++ Object-Oriented Programming Using C++ 模板 通用型程序设计 本章要点 函数模板 通用算法 类模板 通用数据结构,容器类型 模板的编译模式 如何组织模板的代码 函数模板 通用算法 函数模板 问题 C++是一种强类型的语言,这对实现某些简单的函数似乎是个障碍,即使是简单的算法,也要求我们为所有要处理的类型都提供一个实现 例如max(x,y) 这要求重复书写几乎相同的代码 一种解决方案 预处理器宏 宏的缺陷 函数模板 函数模板提供了一种机制,通过它可以保留函数定义和函数调用的语义,而不必绕过C++的强类型检查 函数模板 函数模板提供了一个用来自动生成各种类型函数实例的算法 程序员对于函数接口(参数和返回类型)中的全部或者部分类型进行参数化,而函数体保持不变 如果一个函数的实现对一组实例都是相同的,并且每个实例都处理唯一的一种数据类型,那么该函数就可以定义为函数模板 函数模板 max函数模板 template class Type Type max( Type a, Type b) { return a b ? a : b ; } 函数模板的定义 关键字template放在模板声明和定义的最前面 template后面是用尖括号括起来的模板参数 模板参数表不能为空 模板参数可以是模板类型参数,代表一种类型 模板类型参数由关键字class或typename后加一个标识符构成,
文档评论(0)