面向对象程序设计及C++ 教学课件 作者 朱立华 朱建 俞琼 第6章_模板.pptVIP

面向对象程序设计及C++ 教学课件 作者 朱立华 朱建 俞琼 第6章_模板.ppt

  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文档。上传文档
查看更多
面向对象程序设计及C++ 主讲: 第6章 模板 本章作业 作业本:P209~P212页:一、二(3、4)、四(2、5) 本章内容提要 模板的概念、定义和使用模板的方法 模板类与类模板 模板函数与函数模板 本章内容安排 6.1 模板的概念 6.2 函数模板与模板函数 6.3 类模板与模板类 6.4 本章小结 6.1 模板的概念 模板是C++语言的一个重要特性。模板使得程序员能够快速建立具有类型安全的类库集合和函数集合,是通用程序设计的利器。它的实现,提供了重用程序源代码的有效方法,方便了更大规模的软件开发。 若一个程序的功能是对任意类型的数据进行同样的处理,则将所处理的数据类型说明为参数,就可以把这个程序改写为模板 模板分为类模板(class template)和函数模板(function template)。 6.1 模板的概念 void swap(int x, int y) { int temp=x; x=y; y=temp; } void swap(float x, float y) { float temp=x; x=y; y=temp; } 6.1 模板的概念 template class T //这里的class不是定义类的标识, //而是表明T是一个类型参数 void swap(T x,T y) { T temp=x; x=y; y=temp; } 6.1 模板的概念 6.2 函数模板与模板函数 函数模板就是实现数据类型参数化的函数定义,得到一个函数族。当函数中的数据成员、函数的返回值类型需要用未知类型进行抽象时,就需要定义函数模板。在需要使用函数时,用实际的数据类型对类型参数自动实例化得到对应的模板函数,调用该函数完成特定功能。 6.2.1 函数模板的定义与模板函数的使用 1.函数模板的一般定义形式是: template class 类型形式参数 函数返回类型 函数名(形式参数表) { … //函数体 } 其中template是一个声明模板的关键字,class在此只是借用此关键字表示其后是一个类型参数。类型形式参数表中是用来抽象类型的标识,将来可以用任何实际的类型(包括类类型)进行实例化。 6.2.1 函数模板的定义与模板函数的使用 2.模板函数 在使用函数模板时,关键字class后面的类型形式参数必须实例化,即用实际的数据类型实例化类型形式参数,根据实在参数类型,将生成一个具体的模板函数,该模板函数的函数体与函数模板的函数体完全相同。所以,在程序中真正执行的代码是模板函数的代码。 6.2.1 函数模板的定义与模板函数的使用 //li6_1.cpp:函数模板示例 #includeiostream using namespace std; templateclass T //类型未知,用类型参数T表示 T Max(T a,T b) //返回两个同类型的形式参数 { return ab ?a :b ; } // a,b中的较大者 void main() { coutMax(2,8) is Max(2,8)endl; //用int型实例化T,根据调用时实参的类型自动进行 coutMax(2,8) is Max(2,8)endl; //用char型实例化T,根据调用时实参类型自动进行 } 6.2.1 函数模板的定义与模板函数的使用 NOTE (1)参数类型的实例化是隐式进行的,根据调用时最先遇到的实在参数的类型系统自动实例化类型参数,产生一个具体的模板函数,实例化时无需显式声明 (2)函数模板的异常处理问题。在应用函数模板生成模板函数时,必须遵守参数类型一致性原则,若出现不一致情况,可采用强制类型转换等手段。 6.2.1 函数模板的定义与模板函数的使用 (3)在template语句与函数模板的定义语句之间不能插入其他语句。 (4)“类型形式参数表”可以由多个参数类型组成,则每个类型前都必须由关键字class引导 6.2.2 重载模板函数 模板函数类似于重载函数,但是它的要求更严格,例如:函数重载时在每个函数体中可以执行不同的任务,但是同一个函数模板实例化后的所有模板函数必须执行相同的任务. 所以,在遇到执行的任务有所差异时,就不可以简单的套用函数模板了,但是可以像重载普通函数那样重载模板函数。 6.2.2 重载模板函数 //li6_2.cpp:重载模板函数示例 #includeiostream #includestring using namespace std; templateclass T T Max(T a,T b) //函数

您可能关注的文档

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档