C++从入门到精通 系列 第18章.ppt_第1页
C++从入门到精通 系列 第18章.ppt_第2页
C++从入门到精通 系列 第18章.ppt_第3页
C++从入门到精通 系列 第18章.ppt_第4页
C++从入门到精通 系列 第18章.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、第18章 C+中的便利之道模板,模板的作用 模板的语法 函数模板的用法 类模板的用法 模板的编译模型 模板的特化,第18章 C+中的便利之道模板,模板的作用 模板的语法 函数模板的用法 类模板的用法 模板的编译模型 模板的特化,第18章 C+中的便利之道模板,模板的作用 模板的语法 函数模板的用法 类模板的用法 模板的编译模型 模板的特化,第18章 C+中的便利之道模板,模板的作用 模板的语法 函数模板的用法 类模板的用法 模板的编译模型 模板的特化,第18章 C+中的便利之道模板,模板的作用 模板的语法 函数模板的用法 类模板的用法 模板的编译模型 模板的特化,第18章 C+中的便利之道模板

2、,模板的作用 模板的语法 函数模板的用法 类模板的用法 模板的编译模型 模板的特化,第18章 C+中的便利之道模板,模板的作用 模板的语法 函数模板的用法 类模板的用法 模板的编译模型 模板的特化,18.1 模板的概念,18.1.1 什么是模板 18.1.2 模板的作用 18.1.3 模板的语法,18.1.1 什么是模板 定义 代码重用的工具,实现类型参数化 函数模板和类模板 类是对象的抽象,模板是类的抽象 泛型编程的基础,18.1.1 什么是模板 两种抽象 面向对象编程 封装、继承、多态 泛型编程 在多种数据类型上皆可操作横向联系 标准模板类库 STL,18.1.2 模板的作用 类型检查 取

3、代重载,18.1.3 模板的语法 函数模板 template 返回类型 函数名(形参表) /函数定义体 例如: template T max( T a, T b ) return a b ? a : b ; ,18.1.3 模板的语法 类模板 template class类名 /类定义 ;,template /类模板声明 class pair /类名 T value1, value2; /类成员量 public: pair (T first, T second) /类成员函数 values1=first; /第一个元素 values2=second; /第二个元素 ;,18.1.3 模板的语法

4、 在类模板外定义成员函数 template T pair:getmax () return value1value2? value1 : value2; 使用 pair myobject (24, 101); myobject.getmax();,18.2 函数模板,【范例18-1】 定义一个函数模板,比较两个相同数据类型的参数的大小,18.2 函数模板,函数模板和模板函数的关系 函数模板是模板的定义,是模板函数的抽象,定义中用到通用类型参数。 模板函数是实实在在的函数定义,是函数模板的实例,它由编译系统在碰见具体的函数调用时所生产,具有程序代码,占用内存空间。,18.2 函数模板,18.3

5、类模板,【范例18-2】 定义一个类模板,接收两个不同数据类型的变量并显示,18.3 类模板,类模板和模板类的关系 类模板是模板的定义,不是一个实实在在的类,而是模板类的抽象,定义中用到通用类型参数。 模板类是实实在在的类定义,是类模板的实例化。定义中参数被实际类型所代替。,18.3 类模板,18.4 模板的编译模型,18.4.1 包含编译模型 18.4.2 分离编译模型,18.4.1 包含编译模型 模板的编译 编译器要求看到所有模板的定义 存在的问题 头文件和源文件的分离 解决办法 #inlcude,18.4.1 包含编译模型 注意 包含编译模型并不是把类模板的声明和定义放在同一个文件里。

6、【范例18-3】,18.4.2 分离编译模型 export关键字 函数模板的分离编译 export template Type sum(Type t1, Type T2) /. ,18.4.2 分离编译模型 只能export一次,否则 可能产生一个链接错误,指出函数模板在多个文件中被定义; 编译器可能多次为同一个模板实参集合实例化该函数模板,由于函数模板实例的重复定义,会引起链接错误; 编译器可能用其中一个export 函数模板定义来实例化函数模板而忽略其他定义。,18.4.2 分离编译模型 类模板的分离编译 类模板Queue,头文件Queue.h template /类模板声明 class

7、Queue /类定义 ; 源文件Queue.cpp export template class Queue; #include “Queue.h”,18.4.2 分离编译模型 优点 更好地把类模板的接口同其实现分离开 问题 需要特定编译器支持 Visual C+ 6.0不支持 现状 一般使用包含编译模型,18.5 模板的特化,18.5.1 函数模板的特化 18.5.2 类模板的特化 18.5.3 类模板的偏特化,18.5.1 函数模板的特化 格式 template /特化标志 const char* max(const char* t1,const char* t2) return (strc

8、mp(t1,t2) 0) ? t2 : t1; /字符串比较 举例,18.5.2 类模板的特化 类模板 template/类模板,包含一个通用类型 class Compare public: static bool IsEqual(const Type ,18.5.2 类模板的特化 类模板的特化 template class Compare public: static bool IsEqual(const double 【范例18-4】,18.5.3 类模板的偏特化 类模板 template class pair pair(T1 x,T2 y) ; 使用 pair obj1; /使用通用模板 pair obj2; /使用偏特化模板,偏特化 template class pair pair( float x, T2 y) ;,18.6 综合应用,内容回顾 模板的概念 函数模板的用法 类模板的用法 模板的编译模型 模板的特化 【范例18-5】 设计一个类模板,实现对任意类型数据的存取,18.8 跟我上机,在Visual

温馨提示

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

最新文档

评论

0/150

提交评论