高级语言程序设计基础(C&C++):模块12 模板.ppt

高级语言程序设计基础(C&C++):模块12 模板.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
模块12 模板 主要内容 1 模板的概念 2 函数模板与模板函数 3 类模板与模板类 模板的引入 程序设计中,当参与运算的数的不同值会随实际情况而变化时,就使用变量来代替这个数。同理,当处理的数据类型随实际情况变化时,可将数据类型作为可变的部分(参数)从程序中抽取出来。等出现真实的数据类型时,再用具体的数据类型代替; 模板就是为解决这个问题而产生的。 1 模板的概念 模板是一种基于类型参数生成函数和类的机制,模板将函数或类中的数据类型作为参数,也称为“参数化的类型”; 模板使用户可将功能相似、仅数据类型不同的函数或类设计为通用的函数模板或类模板,使函数或类适用于多种数据类型的情况; 模板可分为函数模板和类模板; 1 模板的概念 函数模板或类模板不是一个实在的函数或类,只有经过参数实例化,才变为一个具体的函数或类; 参数实例化即给函数模板或类模板带入具体的类型参数; 经过类型参数实例化的函数模板或类模板称为模板函数或模板类; 同一个类模板参数实例化后可生成很多仅数据类型不同的模板类,可以定义每个模板类的对象。 模板的声明 模板声明格式: template <模板参数表> 模板定义体 template为声明模板的关键词,声明一个参数化的类或函数集; “模板参数表”表示一个或多个模板参数,每个模板参数由关键字class和模板形参两部分组成,多个模板形参之间以“,”分割; 模板定义体是该模板的作用体,可以是函数或类的定义。 2 函数模板与模板函数 函数模板和模板函数 重载模板函数 2 函数模板和模板函数 请先看交换两个数据的函数例子: 2 函数模板和模板函数 上述swap函数是重载函数,它们的参数个数相同,实现算法相同,仅参数类型不同; 重载时需要分别定义不同参数类型的版本; 能否为上述的重载函数编写一个通用的算法的函数,使其使用多种数据类型? 2 函数模板和模板函数 函数模板给出了解决问题的办法:将数据类型抽取出来作为函数参数; 函数模板是一个通用函数,其函数类型和参数类型不具体指定,用一个“通用的”类型来代替; 凡是函数体相同的函数都可以用此模板代替,不必定义多个函数。 在函数模板被实例化以前,必须先对函数模板进行声明。 例2 求2个数中的最小数。 模板函数 虽然函数模板中的模板形参T可以被实例化为各种类型,但实例化T的各个模板实参之间必须保持完全一致的类型,否则会出错。 例3 求2个或3个数中的最大数。 函数模板和模板函数的区别: 函数模板不是函数,定义中使用的是通用类型的参数,编译系统不为其产生运行代码; 函数模板只是定义了对数据的加工逻辑,并没有确定真正的数据类型,也就无法生成实际的执行代码; 函数模板和模板函数的区别: 模板函数是函数模板被调用时根据参数类型生成的实际函数,包含最终的执行代码; 模板函数中使用的数据类型都是实际类型; 模板函数出现在函数调用执行过程中,一般不能显式地看到。 4 类模板与模板类 一个类模板允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数或某些成员函数的返回值,能取任意类型; 4 类模板与模板类 如果一个类中数据成员的类型不能确定,或者某个成员函数的参数或返回值类型不能确定,就必须将此类声明为模板; 类模板的存在不是代表一个具体的、实际的类,而是代表着“一类”类。 类模板的定义 定义一个类模板: template <模板参数表> //声明一个模板 class 类名 { //类模板体定义}; 其中<模板参数表>与函数模板中的意义相同; 类成员的声明方法同普通类的定义,只是各个成员(数据和函数)通常要用到模板的通用类型参数。 类模板的定义 定义类的成员函数:在类模板定义体外定义类模板的成员函数时,需在函数体外进行模板声明: Template<模板参数表> <返回类型> 类名<类型名表>::成员函数名(参数表) { //成员函数定义体 } 其中类型名表是类型形参的列表; 例 声明一个类模板 template <class T1, class T2> class Example {public: T1 getx( ) {return x; } T2 gety( ) {return y; } private: T1 x; T2 y; }; 类模板Example中T1、T2为类型参数; 类模板不能直接使用,必须先实例化为具体的类,才能用来定义对象。 类模板的使用 类模板的使用实际上是将类模板实例化成一个具体的类---模板类,它的格式为: <类名> <实参表> 对象表; 其中<实参表>应与该模板中的<模板参数表>匹配,模板类是类模板实例化后的产物,

文档评论(0)

学习让人进步 + 关注
实名认证
内容提供者

活到老,学到老!知识无价!

1亿VIP精品文档

相关文档