- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 模板 ? 知识点 l?????? 模板的概念 l?????? 函数模板和模板函数 l?????? 类模板与模板类 ? 难点 l?????? 函数模板和模板函数 类模板与模板类 ? 要求 掌握: l?????? 模板的概念 l?????? 模板的基本语法 l?????? 函数模板与类模板 了解: l?????? 模板函数与模板类 5.1 模板的概念 5.1.1 模板的概念 模板也叫做参数化的类型,是实现类属机制的一种工具。模板的功能非常强大,可以有效提高程序设计的效率。 我们在编程时经常会遇到这样的情况:对于不同数据类型的参数需要实现相似的函数功能。例如:编写求两个整型数据最大值的函数与求两个实型数据最大值的函数,它们的程序逻辑相同,程序代码也相同,只是它们的参数类型与返回值类型不同。对于这种情况,在C语言中,不得不定义两个函数,然后将程序代码重复书写一遍。同样有时也会遇到具有类似功能的类,例如,一个整型数据集合的类与一个实型数据集合的类,它们实现的功能相同,但存储的数据类型不同。 对于上述情况,C++语言中可以使用模板来避免在程序中多次书写相同的代码。C++允许构造函数模板,创建一个通用功能的函数,支持多种不同的形参。也允许用户构造类模板,使得类中的某些数据成员,某些成员函数的参数和某些成员函数的返回值能取任意类型(包括系统预定义的和用户自定义的)。 使用模板可以从一个函数模板生成多个函数或从一个类模板生成多个类。建立一个模板后,编译器将根据需要从模板生成多份代码。 5.1.2 模板的基本语法 C++中使用关键字template开始一个模板的声明,模板声明的一般形式为: template模板参数表 说明体 模板参数表可以包含一个或多个模板参数声明,如果有多个模板参数,则参数与参数之间用逗号隔开。例如带有一个参数的模板可以用下述形式开头: templateclass T 这里的class和类定义的class不同,表示参数T是一个数据类型。在使用该模板时候,T可以用用户定义的数据类型,也可以用C++语言固有的数据类型,如int, float等替换。 参数标识符T也可以用其它的任何标识符来表示,例如: templateclass first 通常的习惯是,表示数据类型的参数用T打头,后跟表示该参数的含义的英文单词,T表示英文Type。 多个参数的模板声明的格式为: templateclass T1,class T2 类模板参数除了可以是数据类型外,还可以是其他类型的数据,例如整型数据: templateclass T,int size 参数的具体使用方法将在后面详细介绍。 5.2 函数模板和模板函数 5.2.1 函数模板的定义 函数模板的一般说明形式如下:template 参数说明返回类型 函数名(形式参数表){ 函数体} 例如,下面是一个单参数的函数模板的声明: template class Tvoid func(T m){ //函数定义部分} 这样定义的func称为函数模板,它不是一个具体的函数,编译系统不为它产生执行代码。函数模板说明中的参数T,在使用模板生成具体的函数时将被指定的类型标识符替代。 模板中的每个参数在函数参数表中必须至少使用一次。下面的声明是不允许的:template class T1,class T2void f(T1 m){ //函数体 } 这个函数模板声明了两个参数T1和T2,但是却只使用了T1来定义m的数据类型。正确的声明应该是在函数参数表中至少使用T1和T2各一次,如: templateclass T1,class T2void f(T1 m, T2 n){ //…函数体} 。 5.2.2 函数模板的使用 下面我们通过一个例子来看一下函数模板的使用。在C++语言中,设计一个求两个数中较大值的函数max,对于不同的数据类型需要定义函数的不同版本,如: int max(int x,int y) //求两个整型数的最大值{ return (xy)?x:y;} float max(float x,float y) //求两个浮点数的最大值{ return(xy)?x:y;} 这两个函数只有参数类型和返回类型不同,而函数名和函数体是完全相同的。如果使用重载的话,则函数定义部分的代码则相当于做了重复劳动。而如果使用函数模板,可避免这种重复定义,使得程序更加简洁。 用函数模板将上述函数定义如下:template class TT max(T x, T y){return(xy)?x:y;} 说明:上例中,T为类型参数。这样定义的max表示的是一类函数。如果用上面定义的max函数来进行实际操作,首先必
您可能关注的文档
- 3ds Max 动画制作基础 陈超 模块三新.ppt
- 3G基站建设与维护 姚伟 6 项目六新.ppt
- 51系列单片机项目实践 石长华 主编 课件汇总 第11章 单片机与AD接口新.ppt
- 80X86 汇编语言程序设计 廖智 主编 汇编语言第1章新.ppt
- Access_2003数据库案例教程 姚茂群 项目六 窗体设计新.ppt
- Aoto CAD 2010 应用教程 蔡伟美 课题6新.ppt
- AT mega系列单片机原理及应用--C语言教程 海涛 第3章 ATmega 单片机的指令系统新.ppt
- AutoCAD 2010中文版建筑制图教程 曹磊 2 第2章 AutoCAD2010入门基础新.ppt
- AutoCAD二次开发实用教程 郭秀娟 第6章 实体和设备访问函数新.ppt
- AutoCAD设计与实训 白剑宇 第3章 图案填充与尺寸标注新.ppt
文档评论(0)