欢迎来到天天文库
浏览记录
ID:48784401
大小:1.15 MB
页数:132页
时间:2020-01-24
《C++程序设计《模板》.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C++程序设计模板第8章模板本章学习要点函数模板类模板STL(StandardTemplateLibrary,标准模板库)本章学习目标了解函数模板的概念,掌握函数模板的定义与使用了解类模板的概念,掌握类模板的定义与使用了解STL有关内容。第8章模板我们知道C++是一种强类型语言,强类型语言所使用的数据都必须明确的声明为某种严格定义的类型,并且在所有的数值传递中,编译器都强制进行类型相容性检查。虽然强类型语言有力地保证了语言的安全性和健壮性,但有时候,强类型语言对于实现相对简单的函数似乎是个障碍。§8.1为什么需要模板【例8-1】求两个数中的大者(分别考虑整数、长整数、实数的情况)。
2、#includeusingnamespacestd;intmax(intx,inty)//整数比较{returnx>y?x:y;}//长整数比较longmax(longx,longy){returnx>y?x:y;}doublemax(doublex,doubley)//实数比较{returnx>y?x:y;}§8.1为什么需要模板intmain(){inta=12,b=34,m;longc=67890,d=67899,n;doublee=12.34,f=56.78,p;m=max(a,b);n=max(c,d);p=max(e,f);cout<<"int_ma
3、x="<(y)?(x):(y))实际上,只是在预编译时把程序中每一个出现max(x,y)的地方,都使用预先定义好的语句来替换它。这里就是用(x)>(y)?(x):(y)来替换。该定义对于简单的max()函数调用都能正常工作,但是在稍微复杂
4、的调用下,它就有可能出现错误。§8.1为什么需要模板例如,定义了如下的计算平方的带参数宏:#definesquare(A)A*A则如下的调用:square(a+2);会被替换成a+2*a+2,实际计算顺序变成了a+(2*a)+2。另外,宏定义无法声明返回值的类型。如果宏运算的结果赋值给一个与之类型不匹配的变量,编译器并不能够检查出错误。§8.1为什么需要模板模板函数模板类模板§8.1为什么需要模板正因为使用宏在功能上的不便和不进行类型检查的危险,C++引入了模板的概念。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型中的全部或部分类型不具体指定,用一个虚拟的类型来代表。
5、这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在函数调用时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。§8.2函数模板【例8-2】将【例8-1】的程序改为通过函数模板实现。#includeusingnamespacestd;templateTmax(Tx,Ty){returnx>y?x:y;}§8.2.1函数模板的定义intmain(){inta=12,b=34,m;longc=67890,d=67899,n;doublee=12.34,f=56.78
6、,p;m=max(a,b);//调用函数模板,此时T被int取代n=max(c,d);//调用函数模板,此时T被long取代p=max(e,f);//调用函数模板,此时T被double取代cout<<"int_max="<或template7、T>返回类型函数名(形参表)返回类型函数名(形参表){{函数体函数体}}§8.2.1函数模板的定义说明:(1)在定义模板时,不允许template语句与函数模板之间有任何其他语句。下面的模板定义是错误的:templateinta;//错误,不允许在此位置有任何语句Tmax(Tx,Ty){…}§8.2.1函数模板的定义说明:(2)不要把这里的class与类的声明关键字class混淆在一起,虽然它们由相同的字母组成,但含义是不同的。为了区别类与模板参
7、T>返回类型函数名(形参表)返回类型函数名(形参表){{函数体函数体}}§8.2.1函数模板的定义说明:(1)在定义模板时,不允许template语句与函数模板之间有任何其他语句。下面的模板定义是错误的:templateinta;//错误,不允许在此位置有任何语句Tmax(Tx,Ty){…}§8.2.1函数模板的定义说明:(2)不要把这里的class与类的声明关键字class混淆在一起,虽然它们由相同的字母组成,但含义是不同的。为了区别类与模板参
此文档下载收益归作者所有