第十三讲模板及其应用.ppt
《第十三讲模板及其应用.ppt》由会员分享,可在线阅读,更多相关《第十三讲模板及其应用.ppt(40页珍藏版)》请在三一文库上搜索。
1、第十三讲 模板及其应用,13.1 函数模板 13.2 类模板 13.3 类模板应用,13.1 函数模板 13.2 类模板 13.3 类模板应用,1.函数模板的概念,通常设计的算法(处理语句)是可以处理多种数据类型的,但目前处理相同的问题,仍要分别定义多个类似的函数。,13.1 函数模板 13.2 类模板 13.3 类模板应用,int max (int a, int b) /求两个整数中较大值 if(ab) return a; else return b; double max (double a, double b) /求两个浮点数中较大值 if(ab) return a; else retu
2、rn b; char max (char a, char b) . /求两个字符中较大值 ,例1.求两个数据中较大值(P.300),13.1 函数模板 13.2 类模板 13.3 类模板应用,如果“提取”出一个可变化的类型参数T,就可以“综合”成同一个函数(模板),它实际上代表着一组函数:,T max (T a, T b) if(ab) return a; else return b; ,13.1 函数模板 13.2 类模板 13.3 类模板应用,在C+中定义完整的函数模板max时,格式如下:,template T max (T a, T b) if(ab) return a; else re
3、turn b; ,13.1 函数模板 13.2 类模板 13.3 类模板应用,2.函数模板的说明,template ,template: 关键字,指明为函数模板或类模板。,模板参数表:用尖括号“”括起来,一个或多个模板参数,用逗号“,”分开。,模板参数:class。参数名是标识符,其对应实参可以是系统预定义类型或用户自定义类型。,13.1 函数模板 13.2 类模板 13.3 类模板应用,函数定义:和一般函数定义相同。 () ,13.1 函数模板 13.2 类模板 13.3 类模板应用,注意:,1) 应在“返回类型”或“形参表”或“函 数体”中使用上述的“类型形参 名” 。 2) 调用处则类似
4、于一般函数,用户 只需给出具体的实参。 3) 模板函数调用时,不进行实参到 形参类型的自动转换。,13.1 函数模板 13.2 类模板 13.3 类模板应用,例2:函数模板实例一 Program 9-1.cpp (P.302),例3:函数模板实例二 Program 9-2.cpp (P.303),例4:函数模板实例三 Program 9-3.cpp (P.303-304),13.1 函数模板 13.2 类模板 13.3 类模板应用,利用类模板(带类型参数或普通参数的类),一次就可定义出具有共性的一组类。 即,可使得所定义类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值都可以是任意类
5、型的。,13.1 函数模板 13.2 类模板 13.3 类模板应用,1.类模板定义格式,template class 类模板定义体 ,template:关键字,指明本说明为类模板说明。,模板参数表:用尖括号“”括起来的若干个类型形参或者普通形参。说明类型形参时,使用“class ”的方式。说明普通形参时,使用“”的方式。,13.1 函数模板 13.2 类模板 13.3 类模板应用,class:关键字,指明定义的是类模板。,类模板名:用户自定义标识符。,类模板定义体:实际上是类定义体,以类模板参数作为某个类或某个类型名来使用。,13.1 函数模板 13.2 类模板 13.3 类模板应用,注意:,
6、2) 利用类模板说明类对象时,要随类模板名同时给出对应于类型形参或普通形参的具体实参(从而实例化为一个具体的类)。说明格式为: 类模板名 类型形参的相应实参为类型名,而普通形参的相应实参必须为常量。,1) 类定义体中应使用上述的“类型形参名”及“普通形参名”。,13.1 函数模板 13.2 类模板 13.3 类模板应用,3) 类模板的成员函数既可以在类体内进行说明(自动按内联函数处理),也可以在类体外进行说明。 在类体外说明(定义)时使用如下格式: template 返回类型 类模板名 :函数名( 形参表 ) 函数体 ;,上述的“形参1的名字”来自于“形参1的说明”,由“甩掉”说明部分的“类型
7、”而得,是对类型形参或普通形参的使用。而 “类模板名 :”所起的作用正是在类体外定义成员函数时在函数名前所加的类限定符!,13.1 函数模板 13.2 类模板 13.3 类模板应用,例5,对具有一个类型参数T的类模板TestClass,在类体外定义其成员函数getData时的大致样式如下: template T TestClass: getData( 形参表 ) . /函数体 ;,其中的“TestClass:”所起的作用正是在类体外定义成员函数时在函数名前所加的类限定符!,13.1 函数模板 13.2 类模板 13.3 类模板应用,2.仅使用类型参数的类模板示例,例6: #include te
8、mplate class TestClass public: T buffer10; /T类型的数据成员buffer数组大小固定为10 (灵活性差!) T getData(int j); /获取T类型buffer(数组)的第j个分量 ; template T TestClass:getData(int j) return *(buffer+j); ;,13.1 函数模板 13.2 类模板 13.3 类模板应用,void main() TestClass ClassInstA; /char取代T,从而实例化为一个具体的类 char cArr6=“abcde“; for(int i=0; i5;
9、i+) ClassInstA.bufferi=cArri; for(i=0; i5; i+) char res=ClassInstA.getData(i); coutres“ “; coutendl;,13.1 函数模板 13.2 类模板 13.3 类模板应用,void main() TestClass ClassInstF; /实例化为另外一个具体的类 double fArr6=12.1, 23.2, 34.3, 45.4, 56.5, 67.6; for(i=0; i6; i+) ClassInstF.bufferi=fArri-10; for(i=0; i6; i+) double re
10、s=ClassInstF.getData(i); coutres“ “; coutendl; ,13.1 函数模板 13.2 类模板 13.3 类模板应用,程序执行后的显示结果如下: a b c d e 2.1 13.2 24.3 35.4 46.5 57.6,13.1 函数模板 13.2 类模板 13.3 类模板应用,3.仅使用普通参数(非类型参数)的类模板示例,例7: #include template class TestClass public: int bufferi; /使buffer的大小可变化,但其类型则固定为int(灵活性差!) int getData(int j); ; t
11、emplate int TestClass:getData(int j) return *(buffer+j); ;,13.1 函数模板 13.2 类模板 13.3 类模板应用,void main() TestClass ClassInstF; double fArr6=12.1, 23.2, 34.3, 45.4, 56.5, 67.6; for(i=0; i6; i+) ClassInstF.bufferi=fArri-10; for(i=0; i6; i+) double res=ClassInstF.getData(i); coutres“ “; coutendl; ,13.1 函数模
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十 三讲 模板 及其 应用
链接地址:https://www.31doc.com/p-3128306.html