C++ 第二十一讲_模板.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C第二十一讲_模板

《C++语言及编程技巧》 第21讲 模板 第22讲 模板 模板概念 13.1 函数模板与模板函数 13.2 重载模板函数 13.3 类模板与模板类 13.4 类模板用作函数模板的参数 13.5 标准模板库STL简述 模板的概念 模板的概念 例如,设计一个求两参数最大值的函数,不使用模板时,需要定义四个函数: int max(int a,int b){return(a>b)?a,b;} long max(long a,long b){return(a>b)?a,b;} double max(double a,double b){return(a>b)?a,b;} char max(char a,char b){return(a>b)?a,b;} 若使用模板,则只定义一个函数: Template<class type>type max(type a,type b) {return(a>b)?a,b;} 模板的概念 C++程序由类和函数组成,模板也分为类模板(class template)和函数模板(function template)。在说明了一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对应的形参,然后生成一个重载函数。该重载函数的定义体与函数模板的函数定义体相同,它称之为模板函数(template function)。 同样,在说明了一个类模板之后,可以创建类模板的实例,即生成模板类。 13.1 函数模板与模板函数 C++提供的函数模板可以定义一个对任何类型变量进行操作的函数,从而大大增强了函数设计的通用性。使用函数模板的方法是先说明函数模板,然后实例化成相应的模板函数进行调用执行。 函数模板说明 函数模板的一般说明形式如下: template < 模板形参表> <返回值类型> <函数名>(模板函数形参表) { //函数定义体 } 13.1 函数模板与模板函数 template <class T> //也可写成:template <typename T> T min(T a[],int n) { int i; T minv=a[0]; for(i=1;i<n;i++) if(minv>a[i]) minv=a[i]; return minv; } 13.1 函数模板与模板函数 函数模板定义的实例化---模板函数 函数模板只是说明,不能直接执行,需要实例化为模板函数后才能执行。 当编译系统发现有一个函数调用:<函数名>(<实参表>);时,将根据<实参表>中的类型生成一个重载函数即模板函数。该模板函数的定义体与函数模板的函数定义体相同,而<形参表>的类型则以<实参表>的实际类型为依据。 在模板函数被实例化之前,必须在函数的某个地方首先说明它(可能不进行定义),这样,就可以到后面再定义模板。和一般函数一样,如果函数模板的定义在首次调用之前,函数模板的定义就是对它的说明。定义之后的首次调用就是对模板函数的实例化。 13.1 函数模板与模板函数 对模板函数的说明和定义必须是全局作用域。模板不能被说明为类的成员函数。 模板函数有一个特点,虽然模板参数T可以实例化成各种类型,但是采用模板参数T的各参数之间必须保持完全一致的类型。模板类型并不具有隐式的类型转换,例如在int与char之间、float与int之间、float与double之间等的隐式类型转换。而这种转换在C++中是非常普遍的。 例13-1:函数模板仅定义了函数的形状,编译器将根据实际的数据类型参量在内部产生一个相应的参数模板,一个模板函数的数据类型参量必须全部使用模板形参。 13.1 函数模板与模板函数 函数模板方法克服了C语言解决上述问题时用大量不同函数名表示相似功能的坏习惯;克服了宏定义不能进行参数类型检查的弊端;克服了C++函数重载用相同函数名字重写几个函数的繁琐。因而,函数模板是C++中功能最强的特性之一,具有宏定义和重载的共同优点,是提高软件代码重用率的重要手段。 13.1 函数模板与模板函数 void main() { ina a[]={1,3,0,2,7,6,4,5,2}; double b[]={1.2,-3.4,6.8,9,8}; cout<<”a数组的最小值为:” <<min(a,9)<< endl; cout<<”b数组的最小值为:” <<min(b,4)<<endl; } 此程序的运行结果为: a数组的最小值为:0 b数组的最小值为:-3.4 13.1 函数模板与模板函数 //pro

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档