文档详情

C++大学基础教程多态性.PPT

发布:2018-08-23约3.33万字共127页下载文档
文本预览下载声明
* 北京科技大学 -*- 总结 模板分为函数模板和类模板,定义的方式基本是相同的。在使用上稍有差别: 函数模板通过函数参数的虚实结合就能得到具体的模板函数。 而使用类模板时,要在类模板名后面具体说明模板类的实际数据类型。 * 北京科技大学 -*- 11.6.1 函数模板 函数模板定义的基本格式 : template typename 参数化类型名 函数返回类型 函数名(形式参数列表) {函数体 } “template”是定义模板的关键字。 在一对尖括号内,关键字“typename”后面声明所使用的“参数化类型名”。 关键字“typename”可以用“class”取代 。 * 北京科技大学 -*- 11.6.1 函数模板 模板的其余部分和一般的函数定义的格式完全相同。只是在函数定义时可以使用参数化类型来代表各种具体的数据类型。 参数化类型可以用于: 函数返回值类型; 函数参数表内形式参数的类型; 函数体内,自动变量的类型。 * 北京科技大学 -*- 例11.9 函数模板的定义和使用:定义和使用确定3个数据的最大值函数模板。 #includeiostream using namespace::std; templatetypename T T max_value(T x,T y,T z) //函数模板的定义:求x、y、z的最大值 { T temp; temp = xy?x:y; return tempz?temp:z; } void main() { coutmax_value(12,32,21)endl; //用整数作实参调用函数模板 coutmax_value(a,A,9)endl; //用字符作实参调用函数模板 } 程序执行后,输出: 32 a * 北京科技大学 -*- 11.6.1 函数模板 函数模板定义的一般格式 template typename 参数化类型名1, ………typename 参数化类型名n 函数返回类型 函数名(形式参数列表) {函数体 } * 北京科技大学 -*- 例11.10 编写一个函数模板,可以按指定的操作数类型进行乘法。 // 例11.10 带有两个形式参数的函数模板 #includeiostream.h //p10-.cpp templatetypename P1,typename P2 P1 cal(P1 x, P2 y) //函数模板有两个参数化类型名:P1和P2 { return (x * (P1)y); } //按x类型进行乘法 void main() { unsigned short w=230; short z=150; coutcal(w,z)endl; //按无符号数相乘 coutcal(z,w)endl; //按有符号数相乘 } 程序运行的结果是: 34500 -31036 * 北京科技大学 -*- 11.6.1 函数模板 带有确定类型的参数的函数模板 函数模板的形式参数表中除了使用参数化类型名以外,还可以使用确定类型的参数。也就是说,函数模板的参数表中,一定要包含参数化类型名,但不一定都使用参数化类型名。还可以根据需要,使用确定类型的参数。如整型的参数、实型的参数,等等。 * 北京科技大学 -*- 例11.11 设计和编写一个通用的输入数组元素的函数模板。可以用它来输入各种不同数据类型的数组。 #includeiostream.h //p11-11.cpp #include typeinfo.h template class Q1 //函数模板 void ArrayInput(Q1 array, int num) {cout 输入num个typeid(Q1).name()\b型数据endl; for (unsigned j= 0; j num; j++) cin array[j]; //输入数组元素 } void main() { int number; float floatArray[4]; int intArray[3]; number=sizeof(floatArray)/sizeof(float); ArrayInput(floatArray, number); //输入整型数组元素 number=sizeof(intArray)/sizeof(int); ArrayInput(intArray,
显示全部
相似文档