u:57 2.Max0函数 template <typename T> T Max t X, T y) void maino if (x>y) cout<<Max(10. 20)<<end1; return x cout<<Max(10.0. 20.0<<end 1: else cout<<Max(A, B)<<end1 return y;
21:17:57 2. Max()函数 template <typename T> T Max(T x,T y) { if (x>y) return x; else return y; } void main() { cout<<Max(10,20)<<endl; cout<<Max(10.0,20.0)<<endl; cout<<Max('A','B')<<endl; }
u:57 冒泡排序的函数模板 template <typename Element Type void Sort Bubble(element Type *a, int size)( int i work. Element Type temp for (int pass =1; pass<size; pass++)i work 1 for (i=0; i<size-pass; i++)( if(a[i]>a[i+1]){ temp a li]; ali]= a[i+1]; a[i+1]= temp work =0 if work break
21:17:57 3. 冒泡排序的函数模板 template <typename ElementType> void SortBubble(ElementType *a,int size){ int i,work; ElementType temp; for(int pass =1;pass<size;pass++){ work = 1; for(i=0;i<size-pass;i++){ if(a[i]>a[i+1]){ temp = a[i];a[i] = a[i+1];a[i+1] = temp; work = 0; } } if (work) break; } }
u1:57 关于函数模板的说明 函数模板定义中类型形式参数表中的类型在函数模板的定 义中至少要使用一次 类型形式参数表中的类型不能是具体的某种类型,只能是 “通用”类型 编译时对函数模板不产生可执行代码(为什么?) 函数模板可直接调用 例:abs(-100000) 编译时,根据传递给函数的实参的类型,确认是否与函数 模板中对应的形参相匹配,若匹配则实参的类型替换函数 模板的函数形参列表中出现的类型参数,产生一个重载的 函数,该函数称为模板函数
21:17:57 关于函数模板的说明 ➢ 函数模板定义中类型形式参数表中的类型在函数模板的定 义中至少要使用一次 ➢ 类型形式参数表中的类型不能是具体的某种类型,只能是 “通用”类型 ➢ 编译时对函数模板不产生可执行代码 (为什么?) ➢ 函数模板可直接调用 例: abs(-100000); ➢ 编译时,根据传递给函数的实参的类型,确认是否与函数 模板中对应的形参相匹配,若匹配则实参的类型替换函数 模板的函数形参列表中出现的类型参数,产生一个重载的 函数,该函数称为模板函数
u1:57 函数模板可以重载:同一个函数模板得到的模板函数之间 是重载关系 1.函数模板之间的重载 template <typename T> template <typename T> T Max t a, t b) T Max(t a, t b, t c return a>b?a: b: return a>b?(a>c? a: c):(b>c? b: c) void maino i cout < Max(12, 120)<< end1; cout<<Max(10.0,100.0)<<end1; cout<<Max(12,120,1200)<end1; cout<<Max(10.0,100.0,100.0)<<end1;
21:17:57 ➢函数模板可以重载:同一个函数模板得到的模板函数之间 是重载关系 template <typename T> T Max(T a,T b) { return a>b?a:b; } 1. 函数模板之间的重载 template <typename T> T Max(T a,T b,T c) { return a>b?(a>c?a:c):(b>c?b:c); } void main(){ cout << Max(12,120) << endl; cout << Max(10.0,100.0) << endl; cout << Max(12,120,1200) << endl; cout << Max(10.0,100.0,1000.0) << endl; }
u1:57 2.函数模板与普通函数之间的重载 template <typename T> char* Max(char *a, char *b) T Maxt a, t b) if (strcmp(a, b)>0)return a return a>b?a: b: else return b void maino( cout < Max(12, 120)<< end1; cout<<Max(12.5,120.5)<<end1; cout < Max("abCDe","abcde )< end1
21:17:57 2. 函数模板与普通函数之间的重载 template <typename T> char* Max(char *a,char *b) T Max(T a,T b) { { if (strcmp(a,b)>0) return a; return a>b?a:b; else return b; } } void main(){ cout << Max(12,120) << endl; cout << Max(12.5,120.5) << endl; cout << Max("ABCDE","abcde") << endl; }