惠州学院c++第8章模板.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文档。上传文档
查看更多
惠州学院c第8章模板

第二部分 面向对象的程序设计 第3章 类和对象(一) 第4章 类和对象(二) 第5章 继承和派生 第6章 虚函数与多态性 第7章 运算符重载 第8章 模板 第9章 标准模板库STL 第10章 C++语言的输入和输出 第8章 模板 本章重点: 模板的概念 函数模板与模板函数 类模板与模板类 模板是C++最重要的特性之一,使用模版可以设计出与数据类型无关的程序框架,可以建立具有通用类型的类库和函数库。 模板是C++软件重用机制的又一完美体现,引出了参数化多态性的概念,即把程序所处理的对象的类型参数化,使得一段程序可以用于多种不同类型的对象。 8.1 模板的概念 前面已经学过函数的重载,对于int型和float型数据,必须定义两个单独的函数Max( ),才能实现对两个数求最大值的功能。如下程序所示的函数Max,,实现两个函数的主要操作都是一样的,唯一的差别是:一个函数处理int 型数据,另一个函数处理float 型数据。 int Max( int a, int b) //求两个int数最大值 { return ab?a:b; } float Max( float a, float b) //求两个float数最大值 { return ab?a:b; } 可以看出,求任何类型两个数的最大值,都有下列函数定义形式: T Max( T a, T b) //求两个T类型数最大值 { return ab?a:b; } 这种Max重载函数的统一特征是参数类型不同,函数体操作却完全相同。考虑这样两个问题: 第一,能否避免函数重载时的重复工作? 第二,这些重载函数对新的数据类型是否支持? 要解决这两个问题, C++中的模板就可以做到。 有了模板,重复的函数重载工作可以省略; 良好的模板再结合运算符重载等其他机制,也能够适用于各种新定义的数据类型。 8.2 函数模板与模板函数 函数模板是函数的一种抽象形式。函数模板的定义形式为: template class T1,class T2,... 返回类型 函数模板名(数据参教表) { 函数模板的函数体 } 前面的Max函数因此可以写成如下形式: template typename T T Max( T a, T b) //求两个T类型数最大值 { return ab?a:b; } 模板并不是函数,它是以具体的类型为实参来生成函数体的一种程序框架,C++在编译函数模板时,不会产生任何执行代码。 只有在用函数模板来定义具体函数时,才会生成执行代码,而使用函数模板则只需以函数模板名为函数名进行函数调用即可。 【例8.1】编写求最大和求绝对值两个函数模板。 /* 08_01.cpp */ #includeiostream using namespace std; template typename T T Max( T a, T b) //求两个T类型数最大值 { return ab?a:b; } template typename T T Abs( T a) //求T类型数的绝对值 { return a=0?a:-a; } int main( ) { int ia=-5,ib=11,ic; float fa=3.14f,fb=7.2f,fc; ic=Max(ia,ib); cout”Max(ia,ib)=”icendl?; ic=Abs(ia)?; cout”Abs(ia)=”icendl?; fc=Max(fa,fb); cout”Max(fa,fb)=”fcendl?; fc=Abs(fa)?; cout”Abs(fa)=”fcendl?; return 0; } Max(ia,ib)=11 Abs(ia)=5 Max(fa,fb)=7.2 Abs(fa)=3.14 C++的编译器在扫描到Max(ia,ib)时,因为是第一次发现Max函数调用,而ia,ib是整型,因此确定函数模板中的抽象类型T为int,所以内部生成如下的模板函数: template int int Max( int a, int b) { return ab?a:b; } 而把此参数类型具体化产生新的模板函数的过程称为函数模板实例化。 【例8.2】重载模板函数。 /* 08_02.cpp */ #includeiostream.h #includestring.h template typename T T Max( T a, T b) //求两个T类型数最大值 { return ab?a:b; } char *Max(char *pa,char *pb) { return strcmp(pa,pb)0?pa:pb;

文档评论(0)

kabudou + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档