第09章 模板与群体类(2010)_第1页
第09章 模板与群体类(2010)_第2页
第09章 模板与群体类(2010)_第3页
第09章 模板与群体类(2010)_第4页
第09章 模板与群体类(2010)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

20009 3 24 1 面向对象程序设计 下 课程讲义 C 任课教师 叶亚琴所在院系 信息工程学院软件工程系任课时间 2010年3月 2010年7月 第9章重点 模板 模板的基本概念函数模板类模板 模板的基本概念 所谓模板 就是将某段程序中的数据类型参数化 使得它能够处理某个范围内的数据类型而不必为每种可能的类型都建立一个实例 从而避免了重复劳动 增强了程序的灵活性和有效性 C 程序由函数和类组成 模板也分为函数模板和类模板 函数模板 functiontemplate 20009 3 24 4 函数的功能相同 但处理的数据类型不同 可以使用C 提供的函数模板避免函数代码的重复编写 具体做法 建立一个通用函数 其函数类型和形参类型不具体指定 用一个虚拟的类型来代表 函数模板 functiontemplate 例 intabs intx returnx 0 x x doubleabs doublex returnx 0 x x templateTabs Tx returnx 0 x x intmain intn 5 doubled 5 5 cout abs n endl cout abs d endl 调用函数时系统会根据实参的类型来取代模板中的虚拟类型 从而实现不同函数的功能 20009 3 24 7 函数模板的定义形式 template类型名函数名 参数表 函数体的定义 template类型名函数名 参数表 函数体的定义 或 模板函数以关键字template开头 T为类型参数 可以用来指定函数模板的形参类型 返回值类型和模板函数局部变量的类型 什么是函数模板 template类型名函数名 参数表 函数体 intadd intx inty return x y templateTadd Tx Ty return x y 函数模版 试一试 C 中的模板提供了重用源代码的方法 例如 设计一个求两参数最大值的函数 不使用模板时 需要定义四个函数 intmax inta intb return a b a b longmax longa longb return a b a b doublemax doublea doubleb return a b a b charmax chara charb return a b a b 如果使用模板 则只需要定义一个函数 TemplateTmax Ta Tb return a b a b 函数模板例1 includeUsingnamespacestd templateTmax Ta Tb returna b a b voidmain cout max 20 30 max 20 30 endl cout max t v max t v endl cout max 10 1 15 2 max 10 1 15 2 endl 类型参数可以不只一个 可以根据需要确定个数 如 tempalte 函数模板只适用于函数的参数个数相同而类型不同 且函数体相同的情况 说明 函数模板例2 includeusingnamesapcestd templateTmin Ta intn inti Tminv a 0 for i 1 ia i minv a i returnminv voidmain inta 1 3 0 2 7 6 4 5 2 doubleb 1 2 3 4 6 8 9 8 cout a数组的最小值为 min a 9 endl cout b数组的最小值为 min b 4 endl 函数模板的重载 includeusingnamesapcestd templateTmin Tx Ty couty y x templateTmin T a intn inti Tminv a 0 for i 1 ia i minv a i cout 调用min Ta intn 最小值为 returnminv voidmain intx 8 y 23 doublea 5 2 342 11 346 8 93 18 111 5 930 cout min x y endl cout min a 5 endl 类模板 类模板是类的抽象 类是类模板的实例 类成员声明的方法与普通类的定义几乎相同 只是在它的各个成员 数据成员和函数成员 中通常要用到模板的数据类型参数T 20009 3 24 14 例 classPair int public Pair int inta intb x a y b intmax return x y x y intmin return x y x y private intx y classPair float public Pair float floata floatb x a y b floatmax return x y x y floatmin return x y x y private floatx y classPair public Pair Ta Tb x a y b Tmax return x y x y Tmin return x y x y private Tx y 声明类模板 减少重复的工作 template 定义对象的方法 Pairp1 4 7 Pairp2 1 5 6 7 Pairp3 2 5 9 67 类模板的成员函数在类外定义 应当写成类模板的形式 如 templateTPair max return x y x y templateclass类名 类成员声明 模板对象名1 对象名n template类型名类名 函数名 参数表 类模板实例化 类 对象 类实例化 类模板类型参数可以有一个或多个 每个类型前面都必须加typename 或class 如 tempalteclasssomeclass someclassobj 函数模板 类模板的定义和实现必须写在一起 因为模板在例化时 需要知道类模板和函数模板的完整定义 说明 类模板例1 include includeusingnamespacestd templateclassArray public Array Ta Tb x a y b Tsum Ttempsum x y returntempsum private Tx y voidmain ArrayA 7 0 6 0 coutB 1 0 6 0 cout B元素和为 B sum endl 20009 3 24 21 扩充 类模板的派生 templateclassbase templateclassderive publicbase 与一般的类派生定义相似 只是指出它的基类时要加上模板参数 如base 扩充 标准模版库 STL 简介 1 是C 语言提供的一套预先写好的函数模版和类模版 2 STL是StandardTemplateLibrary的缩写 3 是C 标准库的一个子集 1 标准模版库 STL 是什么 absfindlistvector 2 标准模版库 STL 常见的模版有哪些 扩充 标准模版库 STL 简介 扩充 活动模版库 ATL 简介 TheActiveTemplateLibrary ATL isasetoftemplate basedC classesthatletyoucreatesmall fastComponentObjectModel COM objects IthasspecialsupportforkeyCOMfeatures includingstockimplementations dualinterfaces standardCOMenumeratorinterfaces connectionpoints tear offinterfaces andActiveXcontrols 1 活动模版库 ATL 是什么 1 ATL是一组基于模版的C 类 2 ATL可以使你创建小型的快速的COM对象 3 ATL对COM的关键特征提供支持 这些特征包括 栈的实现 双重接口 标准COM枚举器接口 连接点 自销毁接口 ActiveX控件 4 ATL是ActiveTemplateLibrary的缩写 标准模版库使用示例 include fori ofunctions include forvalarrayusingnamespacestd defineARRAY SIZE10 arraysizetypedefvalarrayINTVALARRAY intmain inti INTVALARRAYval array ARRAY SIZE for i 0 i ARRAY SIZE i val array i i cout Sizeofval array val array size n n cout Theresultofval arraybeforecallingabs n for i 0 i ARRAY SIZE i cout val array i if i ARRAY SIZE 1 cout cout endl INTVALARRAYabs array abs val array cout Theresultofval arrayaftercallingabs n for i 0 i ARRAY SIZE i cout abs array i if i ARRAY SIZE 1 cout 输出结果 Sizeofval array 10Theresultofval arraybeforecallingabs 0 1 2 3 4 5 6 7 8 9Theresultofval arrayaftercallingabs 0 1 2 3 4 5 6 7 8 9 本章习题 1 模板参数表中参数使用的符号分隔是 A B C D 以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论