13_模板.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
函数重载与函数模板 函数重载 重载函数(Overloading)通常用于执行相似的操作,这些操作涉及到应用于不同数据类型上的不同程序逻辑。 int max(int a, int b); double max(double a, double b); char max(char a, char b); 参数的类型不同,逻辑完全相同 if (a b) return a; else return b; 函数重载与函数模板 模板 如果对于每种数据类型,程序逻辑和操作都是相同的,那么使用函数模板(function template)可以更为简便地对函数进行重载 对于所有的数据类型,程序员只需要编写单个函数模板定义。 定义一个函数模板实质上就定义了一整套重载函数 函数模板的定义 函数模板的定义 函数模板的定义以template关键字开头,后跟用一对尖括号括起的该函数模板的模板参数列表。 template class T 或 template typename T 模板参数列表中的每个参数(常常称为形式类型参数)由关键字typename或关键字class开头。(例:maximum函数) 形式类型参数是基本类型或者用户自动义类型的占位符。这些占位符用于指定 函数参数的类型 函数的返回类型 在函数定义体内的声明变量 函数模板的定义与其他函数的定义一样,只是使用形式类型参数作为实际数据类型的占位符 函数模板特化 假设在这个模板函数的调用中提供了实参类型,C++编译器会自动生成独立的函数模板特化(function-template specialization)来恰如其分地处理调用的每种类型 例子:打印数组里的元素 使用模板的注意事项 如果通过用户自定义类型调用函数模板,并且该模板用到了运算符(例如,“”,“=”),那么这些运算符必须被这个用户定义类型重载。忘记重载这些函数和运算符会导致编译错误。 实验题十讲解 重载函数模板 函数模板也可以被重载,有两种不同的情况 不同模板有相同的函数名字及不同的函数参数。例如:printArray(const T *array, int low, int high) 一个函数模板还可以被一个具有相同函数名的非模板函数所重载。例如: printArray(const Employee *array, int count) 编译器在函数调用时进行匹配处理来决定调用哪一个函数。 首先,编译器会找出所有和调用函数相匹配的函数模板,然后根据调用函数的参数类型对函数模板进行特化; 接着编译器找出所有与调用函数相匹配的普通函数; 与调用函数最匹配的普通函数或者函数模板特化被调用; 如果一个普通函数和一个函数模板特化跟调用函数的匹配程度完全相同,那么普通函数将被调用。 如果有多个函数和调用函数相匹配,会出现编译错误 类模板 堆栈是一种数据结构,在栈顶插入元素,并且元素按后进先出的顺序出堆栈。 堆栈的行为不应该受其所容纳的数据类型的约束。 C++类模板可以使我们描述这个一般堆栈的概念并实例化这个泛型(generic)堆栈类 类模板也称为参数化类型(parameterized type),因为它们需需要一种或多种参数类型来指出怎样定制一个“泛型类”模板,从而构成类模板特化。 创建类模板 Stack T 和传统的类定义一样,除了在类定义之前有这样的头部: template typename T 形式类型参数 T 表示将要创建的Stack类的元素的类型 类模板的成员函数的定义就是函数模板。出现在类模板定义之外的成员函数定义的开头都是: template typename T 类模板StackT利用二元作用域分辨运算符::把每个成员函数都限定到类模板范围内。 非基本类型使用Stack类模板有两个限制: 必须有一个默认的构造函数,用于创建存储堆栈元素的数组 必须支持赋值运算,重载了赋值运算符“=” 创建函数模板来测试类模板StackT doubleStack和intStack处理的代码几乎是相同的。 可以使用函数模板提高代码的可重用性 类模板的非类型参数和默认类型参数 模板还可以使用非类型参数 template typename T, int elements 类的头部可以包含一个声明为数组的private数据成员 T stackHolder[ elements ]; 使用如下声明实例化一个有100个double型元素的Stack类模板特化 Stack double, 100 mostRecentSalesFigures; 类型参数可以指定其默认类型,例如, template typename T = string 可以指定一个Stack中的元

文档评论(0)

海川电子书城 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档