《程序设计实习》 8. 模板.pptVIP

  • 0
  • 0
  • 约3.55千字
  • 约 71页
  • 2021-08-05 发布于湖北
  • 举报
程序设计实习;函数模板和类模板;信息科学技术学院《程序设计实习》 郭炜;函数模板;函数模板;函数模板;函数模板;函数模板中可以有不止一个类型参数。 ? template class T1, class T2 T2 print(T1 arg1, T2 arg2) { cout arg1 arg2endl; return arg2; } ; 求数组最大元素的MaxElement函数模板 template class T T MaxElement(T a[], int size) //size是数组元素个数 { T tmpMax = a[0]; for( int i = 1;i size;++i) if( tmpMax a[i] ) tmpMax = a[i]; return tmpMax; } ; 不通过参数实例化函数模板 #include iostream using namespace std; template class T T Inc(T n) { return 1 + n; } int main() { cout Incdouble(4)/2; //输出 return 0; } ;函数模板可以重载,只要它们的形参表或类型参数表不同即可。 ? templateclass T1, class T2 void print(T1 arg1, T2 arg2) { cout arg1 arg2endl; } templateclass T void print(T arg1, T arg2) { cout arg1 arg2endl; } templateclass T,class T2 void print(T arg1, T arg2) { cout arg1 arg2endl; } ;? 在有多个函数和函数模板名字相同的情况下,编译器如下处理一条函数调用语句 先找参数完全匹配的普通函数(非由模板实例化而得的函数)。 再找参数完全匹配的模板函数。 3) 再找实参数经过自动类型转换后能够匹配的普通函数。 4) 上面的都找不到,则报错。 ;*;匹配模板函数时,不进行类型自动转换 templateclass T T myFunction( T arg1, T arg2) { coutarg1 arg2\n; return arg1;} …… myFunction( 5, 7); //ok:replace T with int myFunction( 5.8, 8.4); //ok: replace T with double myFunction( 5, 8.4); //error,no matching function for call to myFunction(int, double) ;#include iostream using namespace std; templateclass T,class Pred void Map(T s, T e, T x, Pred op) { for(; s != e; ++s,++x) { *x = op(*s); } } int Cube(int x) { return x * x * x; } double Square(double x) { return x * x; } ;int a[5] = {1,2,3,4,5}, b[5]; double d[5] = { 1.1,2.1,3.1,4.1,5.1} , c[5]; int main() { Map(a,a+5,b,Square); for(int i = 0;i 5; ++i) cout b[i] ,; cout endl; Map(a,a+5,b,Cube); for(int i = 0;i 5; ++i) cout b[i] ,; cout endl; Map(d,d+5,c,Square); for(int i = 0;i 5; ++i) cout c[i] ,; cout endl; return 0; };信息科学技术学院《程序设计实习》 郭炜;类模板 – 问题的提出;这些数组类,除了元素的类型不同之外,其他的完全相同 类模板:在定义类的时候给它一个/多个类型参数。在调用类模板时,由编译系统根据实参的数据类型自动产生相应的模板类。;类模板的定义;类模板的定义;类模板示例: Pair类模板 template class T1,class T2 class Pair { public: T1 key; //关键字 T2 value;

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档