模板的概念 1.所谓模板是一种使用无类型参数来产生一系列 函数或类的机制。 2.若一个程序的功能是对某种特定的数据类型进 行处理,则可以将所处理的数据类型说明为参 数,以便在其他数据类型的情况下使用,这就 是模板的由来。 3.模板是以一种完全通用的方法来设计函数或类 而不必预先说明将被使用的每个对象的类型。 4.通过模板可以产生类或函数的集合,使它们操 作不同的数据类型,从而避免需要为每一种数 据类型产生一个单独的类或函数
模板的概念 1. 所谓模板是一种使用无类型参数来产生一系列 函数或类的机制。 2. 若一个程序的功能是对某种特定的数据类型进 行处理,则可以将所处理的数据类型说明为参 数,以便在其他数据类型的情况下使用,这就 是模板的由来。 3. 模板是以一种完全通用的方法来设计函数或类 而不必预先说明将被使用的每个对象的类型。 4. 通过模板可以产生类或函数的集合,使它们操 作不同的数据类型,从而避免需要为每一种数 据类型产生一个单独的类或函数
模板分类 口函数模板( function template) ■是独立于类型的函数 1可产生函数的特定版本 口类模板( class template) 跟类相关的模板,如 vector 可产生类对特定类型的版本,如 vector<int>
模板分类 函数模板(function template) ◼ 是独立于类型的函数 ◼ 可产生函数的特定版本 类模板(class template) ◼ 跟类相关的模板,如vector ◼ 可产生类对特定类型的版本,如vector<int> 7
求最大值模板函数实现 1求两个数最大值,使用模板 template class T> T max(Ta, tbi return(a>b)? a, b 2 template<模板形参表> <返回值类型><函数名>(模板函数形参表) /函数定义体
求最大值模板函数实现 1.求两个数最大值,使用模板 template < class T > T max(T a , T b){ return ( a > b ) ? a , b; } 2.template < 模板形参表> <返回值类型> <函数名>(模板函数形参表) { //函数定义体 } 8
模板工作方式 口函数模板只是说明,不能直接执行,需要实例 化为模板函数后才能执行 口在说明了一个函数模板后,当编译系统发现有 一个对应的函数调用时,将根据实参中的类型 来确认是否匹配函数模板中对应的形参,然后 生成一个重载函数。该重载函数的定义体与函 数模板的函数定义体相同,它称之为模板函数
模板工作方式 函数模板只是说明,不能直接执行,需要实例 化为模板函数后才能执行 在说明了一个函数模板后,当编译系统发现有 一个对应的函数调用时,将根据实参中的类型 来确认是否匹配函数模板中对应的形参,然后 生成一个重载函数。该重载函数的定义体与函 数模板的函数定义体相同,它称之为模板函数 9
编写一个对具有n个元素的数组[求最小值的程序,要求 将求最小值的函数设计成函数模板。 #include <iostream> void maino template <class T> {inaa={1,3,0,2,7,6,4,5,2}; T min(t[l, int n double b]={1.2,-3.4689,8}; int 1 cout<<a数组的最小值为:” T minv=a0 <<min(a, 9 < endl or(i=1i<n;i++){ if(minv>aD cou<<b数组的最小值为:” minv=a <<min(b, 4 < endl; 此程序的运行结果为: return miny a数组的最小值为:0 b数组的最小值为:-3.4
#include <iostream> template <class 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; } 编写一个对具有n个元素的数组a[ ]求最小值的程序,要求 将求最小值的函数设计成函数模板。 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