面向对象程序设计及C++ 教学课件 ppt 作者 朱立华 朱建 俞琼 第6章_模板

上传人:E**** 文档编号:89494845 上传时间:2019-05-25 格式:PPT 页数:26 大小:307.50KB
返回 下载 相关 举报
面向对象程序设计及C++ 教学课件 ppt 作者  朱立华 朱建 俞琼 第6章_模板_第1页
第1页 / 共26页
面向对象程序设计及C++ 教学课件 ppt 作者  朱立华 朱建 俞琼 第6章_模板_第2页
第2页 / 共26页
面向对象程序设计及C++ 教学课件 ppt 作者  朱立华 朱建 俞琼 第6章_模板_第3页
第3页 / 共26页
面向对象程序设计及C++ 教学课件 ppt 作者  朱立华 朱建 俞琼 第6章_模板_第4页
第4页 / 共26页
面向对象程序设计及C++ 教学课件 ppt 作者  朱立华 朱建 俞琼 第6章_模板_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《面向对象程序设计及C++ 教学课件 ppt 作者 朱立华 朱建 俞琼 第6章_模板》由会员分享,可在线阅读,更多相关《面向对象程序设计及C++ 教学课件 ppt 作者 朱立华 朱建 俞琼 第6章_模板(26页珍藏版)》请在金锄头文库上搜索。

1、面向对象程序设计及C+,主讲:,第6章 模板,面向对象程序设计及C+,本章作业,作业本:P209P212页:一、二(3、4)、四(2、5),本章内容提要,模板的概念、定义和使用模板的方法 模板类与类模板 模板函数与函数模板,本章内容安排,6.1 模板的概念 6.2 函数模板与模板函数 6.3 类模板与模板类 6.4 本章小结,结束本章,6.1 模板的概念,模板是C+语言的一个重要特性。模板使得程序员能够快速建立具有类型安全的类库集合和函数集合,是通用程序设计的利器。它的实现,提供了重用程序源代码的有效方法,方便了更大规模的软件开发。 若一个程序的功能是对任意类型的数据进行同样的处理,则将所处理

2、的数据类型说明为参数,就可以把这个程序改写为模板 模板分为类模板(class template)和函数模板(function template)。,6.1 模板的概念,void swap(int ,这两个重载函数的功能完全相同,函数体代码相同,形式参数个数一样,唯一的区别在于形式参数的类型不同,6.1 模板的概念,template /这里的class不是定义类的标识, /而是表明T是一个类型参数 void swap(T ,对函数进行抽象,6.1 模板的概念,模板、模板函数、模板类与对象之间的关系示意图,返回,6.2 函数模板与模板函数,函数模板就是实现数据类型参数化的函数定义,得到一个函数族。

3、当函数中的数据成员、函数的返回值类型需要用未知类型进行抽象时,就需要定义函数模板。在需要使用函数时,用实际的数据类型对类型参数自动实例化得到对应的模板函数,调用该函数完成特定功能。,6.2.1 函数模板的定义与模板函数的使用,1.函数模板的一般定义形式是: template 函数返回类型 函数名(形式参数表) /函数体 其中template是一个声明模板的关键字,class在此只是借用此关键字表示其后是一个类型参数。类型形式参数表中是用来抽象类型的标识,将来可以用任何实际的类型(包括类类型)进行实例化。,2.模板函数 在使用函数模板时,关键字class后面的类型形式参数必须实例化,即用实际的数

4、据类型实例化类型形式参数,根据实在参数类型,将生成一个具体的模板函数,该模板函数的函数体与函数模板的函数体完全相同。所以,在程序中真正执行的代码是模板函数的代码。,6.2.1 函数模板的定义与模板函数的使用,/li6_1.cpp:函数模板示例 #include using namespace std; template /类型未知,用类型参数T表示 T Max(T a,T b) /返回两个同类型的形式参数 return ab ?a :b ; / a,b中的较大者 void main() cout“Max(2,8) is “Max(2,8)endl; /用int型实例化T,根据调用时实参的类型自

5、动进行 cout“Max(2,8) is “Max(2,8)endl; /用char型实例化T,根据调用时实参类型自动进行 ,6.2.1 函数模板的定义与模板函数的使用,6.2.1 函数模板的定义与模板函数的使用,NOTE (1)参数类型的实例化是隐式进行的,根据调用时最先遇到的实在参数的类型系统自动实例化类型参数,产生一个具体的模板函数,实例化时无需显式声明 (2)函数模板的异常处理问题。在应用函数模板生成模板函数时,必须遵守参数类型一致性原则,若出现不一致情况,可采用强制类型转换等手段。,6.2.1 函数模板的定义与模板函数的使用,(3)在template语句与函数模板的定义语句之间不能插

6、入其他语句。 (4)“类型形式参数表”可以由多个参数类型组成,则每个类型前都必须由关键字class引导,6.2.2 重载模板函数,模板函数类似于重载函数,但是它的要求更严格,例如:函数重载时在每个函数体中可以执行不同的任务,但是同一个函数模板实例化后的所有模板函数必须执行相同的任务. 所以,在遇到执行的任务有所差异时,就不可以简单的套用函数模板了,但是可以像重载普通函数那样重载模板函数。,6.2.2 重载模板函数,/li6_2.cpp:重载模板函数示例 #include #include using namespace std; template T Max(T a,T b) /函数模板 re

7、turn ab?a:b; char* Max(char* a,char* b) /重载模板函数 return (strcmp(a,b)0?a:b); void main() cout“Max(2,8) is “Max(2,8)endl; cout“Max(“ABCD“,“ABAB“) is “Max(“ABCD“,“ABAB“)endl; ,程序运行结果: Max (2,8) is 8 Max(“ABCD“,“ABAB“) is ABCD,6.2.2 重载模板函数,分析例6.2 函数char* Max(char* a,char* b)中的函数名与函数模板的函数名相同,但操作不同,函数体中的比较

8、采用了字符串比较函数,所以有必要用重载的方法把它们区分开来,这种情况就是重载模板函数。,返回,6.3 类模板与模板类,一个类模板如同函数模板一样,就是实现数据类型参数化的类定义,得到一个类族 当类中的数据成员、成员函数的参数或成员函数的返回值类型需要用未知类型进行抽象时,就需要定义类模板。 在需要定义对象时,首先显式地将类模板中的未知类型实例化得到一个具体的模板类,再定义模板类的对象。这样,类中的数据成员、成员函数的参数及成员函数的返回值能够根据模板参数的匹配情况获得任意想要的数据类型,当然也可以是类类型。,6.3.1 类模板的定义,类模板的一般定义形式是: template class 类名

9、 /类声明体 ;,6.3.1 类模板的定义,NOTE:在类模板外定义的成员函数,与一般类的成员函数类外定义形式相比,特别要注意两点: (1)定义的最开始一定要有模板前缀template ,此处与类模板定义开始处的前缀一定要保持一致。 (2)在成员函数名前面,必须要有“类名 :”前缀,与一般类的成员函数相比,在类名后多了一对尖括号括起的“类型名表”。因为这里的类名不是一个真正的类,而是一个类模板,是带参数的类,因此要将所带的实在参数类型名表示在尖括号中。,6.3.1 类模板的定义,/li6_3.cpp:类模板的定义 #include using namespace std; template /

10、类模板中用到两种类型参数 class Myclass public: Myclass(T1 xx,T2 yy); void Print() /类模板中成员函数可以在类体内定义 cout“x=“x“,y=“yendl; private: T1 x; T2 y; ;,template /类模板中成员函数可以在类体外定义 Myclass:Myclass(T1 xx,T2 yy) x=xx; y=yy; ,6.3.2 模板类的生成与使用,建立类模板之后,可用下列方式创建对象: 类模板名 对象名; 其中,实际类型名是实在参数,与类模板中的类型形式参数相对应。此时,类模板名就是用实际类型对类型参数实例化后

11、得到的模板类,对象名是该模板类的实例。,6.3.2 模板类的生成与使用,例如,在例6.3中已经完成类模板的定义,可以在main( )中创建相关对象: void main() Myclass obj(10,a); /Myclass为模板类 obj.Print(); 程序的运行结果是: x=10,y=a,6.3.2 模板类的生成与使用,类模板与模板类的区别在于:类模板是模板的定义,不是一个实实在在的类,定义中用到通用的类型参数;而模板类是实实在在的类定义,是类模板的实例化,类定义中参数被实际类型所代替,对象属于某一个模板类,而类模板不能定义对象。 例6.4自学或在VC+下运行程序,返回,6.4 本章小结,本章主要有以下内容: (1)模板有函数模板和类模板两种,其共同特征是将类型参数化,用template的形式声明一个类型参数T。 (2)对函数模板中类型参数的实例化是系统在调用函数时根据实在参数的类型自动进行的。 (3)函数模板的使用可以减少函数的重载,一类同名函数,如果函数代码完全相同,形式参数的个数、顺序、返回值类型也相同,只是形式参数的类型不同的时候可以用函数模板将这一类函数进行抽象。 (4)对类模板中类型参数的实例化将得到一个具体的模板类。类模板不可以有对象,而只有模板类才可以定义对象。,返回,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号