《CPP强化训练(模板).ppt》由会员分享,可在线阅读,更多相关《CPP强化训练(模板).ppt(15页珍藏版)》请在三一办公上搜索。
1、模板,东南大学 吴俊E_mail:wu_,C+语言程序设计,代码重用是程序设计的重要特性,为实现代码重用,使得代码具有更好的通用性,需要代码不受数据类型的限制,自动适应不同的数据类型,实现参数化程序设计。模板是C+中进行通用程序设计的工具之一。模板是函数或类的通用样板,当需要函数或类需要处理多种不同类型数据时,可通过模板来创建一个通用功能的函数或类,达到进行通用程序设计的目的。模板分函数模板和类模板两种。,模板,一、模板的概念 模板是C+程序设计中相当重要的一部分,也是通用编程成为现实的理想实现方法之一。如希望函数或类能够处理多种不同类型数据,可以通过模板为函数或类设计一个通用样板(通用数据类
2、型),当处理实际数据时,根据给定数据的实际类型来确定。,模板,二、函数模板的定义和使用 函数重载是指具有相同函数名,但根据不同参数确定不同入口,解决不同问题。但如何把这些同名函数只通过一个通用函数,来适用多种数据类型,使用函数模板就为了这一目的。函数模板的定义格式为:template 或template T(形参表)函数体 其中:T为类型说明符(样板)。,模板,提示:template后不需要加“;”函数模板中声明的类型说明符T,是一种通用数据类型,可以是基本数据类型或已定义的自定义类型。函数模板中,函数的返回值或(和)形参表中可以使用类型说明符T来指定。提示:template说明部分和函数模板
3、定义部分是一个整体,不可分开说明。,模板,例:求绝对值的通用函数定义:#includetemplate T abs(T a)return(a0?a:-a);void main()int n=-10;float m=-3.45;coutabs(n)endl;coutabs(m)endl;,模板,说明:在上述main()函数中,计算abs(n)时,便创建函数模板的一个实例,即创建一个模板函数,这个过程称函数模板实例化。根据实参n的类型推导出函数模板中的abs函数类型参数T为int类型,由此推导出模板中返回值类型也为int。当类型参数T的含义确定后,C+编译器通过函数模板,生成如下形式的一个模板函数
4、:int abs(int a)return(a0?a:-a);,模板,同样,计算abs(m)时,C+编译器通过函数模板,生成如下形式的一个函数:float abs(float a)return(a0?a:-a);提示:函数模板中的类型参数T,是一种抽象的、通用的数据类型。函数模板与函数重载密切相关,通过模板可以解决多种方式的函数重载。,模板,三、类模板的定义和使用 在类中有数据成员和函数成员,如果需要对类中的部分数据成员、函数成员的参数或返回值,能够适用多种不同数据类型,可以使用类模板。注意:类模板是类的进一步抽象。类模板的定义格式为:template class 类成员说明;,模板,其中:可
5、以是用逗号分隔的类型标识符或常量表达式组成。其具体内容为:(1)可以是class 或typename,用来说明一个通用的数据类型参数。(2)标识符,用来说明一个由所规定的常量作为参数。,模板,注意:具有模板参数的成员函数在类外实现时,必须是模板函数:template 类名:(形参表)利用一个类模板声明的是一个类族,类模板是不可以直接使用的,必须先实例化为相应的模板类。因此使用类模板建立对象时,应按如下格式定义:模板 对象1,;,模板,四、模板程序设计举例例1.#includetemplateT1 Mul(T1 a,T2 b)return a*b*b;void main()int r=10;fl
6、oat pi=3.1415;coutMul(pi,r)endl;,模板,#includetemplate class PointT x,y;public:Point(T a,T b)x=a;y=b;void Print()cout p1(1,2);Point p2(12.87,7.56);p1.Print();p2.Print();,#includetemplateclass TestT x,y;public:Test(T a=0,T b=0)x=a;y=b;Test operator+(Test);void Print()coutx,yendl;,templateTest Test:operator+(Test a)Test t;t.x=x+a.x;t.y=y+a.y;return t;void main()Test t1(1,2),t2(10,20),t5;Testt3(3.45,7.68),t4(10.3,12.2),t6;t5=t1+t2;t6=t3+t4;t5.Print();t6.Print();,