例:编写一个对具有n个元素的数组a[]求最小值的程序, 要求将求最小值的函数设计成函数模板。 #include <iostream h> void maino template <class T>i int a[]=t1 3, 0,2, 7, 6,4, 5,2] T min(t all, int n) double b[]={12-346898} d int ii cout<<"a数组的最小值为:” T miny=alo]; < min(a, 9<< endi for(i=1; i<n; i++) cout<<"b数组的最小值为:” if(minv>a[i] < min (b, 4)<< endl; minv=ali]; return minv: 此程序的运行结果为: a数组的最小值为:0 b数组的最小值为:34心
#include <iostream.h> 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() { int 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
10.2菡数模板 使用函数模板: 函数模板是对一组函数的描述说明,不直接产生可执行的 代码,所以不能直接执行,而模板函数是某个函数模板的实例化 它是可以执行的。一个函数模板可以产生多个模板函数。 当编译系统发现有一个函数调用:<函数名>(<实参表 >);时,将根据<实参表>中的类型生成一个重载函数即模板 函数。该模板函数的定义体与函数模板的函数定义体相同,而 形参表>的类型则以<实参表>的实际类型为依据 对模板函数的说明和定义必须是全局作用域。模板不能被说 明为类的成员函数。 模板函数有一个特点,虽然模板参数T可以实例化成各种类 型,但是采用模板参数T的各参数之间必须保持完全一致的类型。 模板类型并不具有隐式的类型转换,例如在int与char之间、 foat与int之间、foat与 double之间等的隐式类型转换。而这 种转换在C++中是非常普遍的 心[u
10.2 函数模板 使用函数模板: 函数模板是对一组函数的描述说明,不直接产生可执行的 代码,所以不能直接执行,而模板函数是某个函数模板的实例化, 它是可以执行的。一个函数模板可以产生多个模板函数。 当编译系统发现有一个函数调用:<函数名>(<实参表 >);时,将根据<实参表>中的类型生成一个重载函数即模板 函数。该模板函数的定义体与函数模板的函数定义体相同,而< 形参表>的类型则以<实参表>的实际类型为依据。 对模板函数的说明和定义必须是全局作用域。模板不能被说 明为类的成员函数。 模板函数有一个特点,虽然模板参数T可以实例化成各种类 型,但是采用模板参数T的各参数之间必须保持完全一致的类型。 模板类型并不具有隐式的类型转换,例如在int与char之间、 float与int之间、float与double之间等的隐式类型转换。而这 种转换在C++中是非常普遍的
10.2数模板 模板函数也遵循普通函数重载规则支持重载,一般来说, 重载函数主要解决函数名相同、算法相同、但参数个数或类型 不同的问题,而函数模板只解决函数名相同、算法相同、参数 个数也相同,仅类型不同的问题。并且要注意函数模板和重载 函数的二义性问题 #include <iostream. h> char *max(char *v1, char *v2) template <class Type> ireturn(strcmp(x, y)>0?x:y);3 Type max(Type v1, Type v2) fi return(v1> v2?v1: v2); } 所以,当一般函数与同名模板函数同 时存在时,调用顺序是一般函数优先。 void maino d cout<<max (100, 300)<<end; cout<<max(32. 1, 3.14<<endl; cout<<max( Zhang"")<<endl;
10.2 函数模板 模板函数也遵循普通函数重载规则支持重载,一般来说, 重载函数主要解决函数名相同、算法相同、但参数个数或类型 不同的问题,而函数模板只解决函数名相同、算法相同、参数 个数也相同,仅类型不同的问题。 并且要注意函数模板和重载 函数的二义性问题。 #include <iostream.h> template <class Type> Type max(Type v1, Type v2) { return(v1 > v2?v1:v2); } void main() { cout<<max(100,300)<<endl; cout<<max(32.1,3.14)<<endl; cout<<max(“Zhang”,”Li”)<<endl; } char *max(char *v1, char *v2) {return(strcmp(x, y)>0?x:y);} 所以,当一般函数与同名模板函数同 时存在时,调用顺序是一般函数优先