C++从入门到精通 系列 第18章.ppt

C++从入门到精通 系列 第18章.ppt

ID:49202011

大小:560.50 KB

页数:34页

时间:2020-02-01

C++从入门到精通 系列 第18章.ppt_第1页
C++从入门到精通 系列 第18章.ppt_第2页
C++从入门到精通 系列 第18章.ppt_第3页
C++从入门到精通 系列 第18章.ppt_第4页
C++从入门到精通 系列 第18章.ppt_第5页
资源描述:

《C++从入门到精通 系列 第18章.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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什么是模板两种抽象面向对象编程封装、继承、多态泛型编程在多种数据类型上皆可操作——横向联系标准模板类库STL18.1.2模板的作用类型检查取代重载18.1.3模板的语法函数模板template返回类

3、型函数名(形参表){//函数定义体}例如:templateTmax(Ta,Tb){returna>b?a:b;}18.1.3模板的语法类模板templateclass类名{//类定义};template//类模板声明classpair//类名{Tvalue1,value2;//类成员量public:pair(Tfirst,Tsecond)//类成员函数{values1=first;//第一个元素values2=second;//第二个元素}};18.1.3模板的语法在类模板外定义成员函数templateTpai

4、r::getmax(){returnvalue1>value2?value1:value2;}使用pairmyobject(24,101);myobject.getmax();18.2函数模板【范例18-1】定义一个函数模板,比较两个相同数据类型的参数的大小18.2函数模板函数模板和模板函数的关系函数模板是模板的定义,是模板函数的抽象,定义中用到通用类型参数。模板函数是实实在在的函数定义,是函数模板的实例,它由编译系统在碰见具体的函数调用时所生产,具有程序代码,占用内存空间。18.2函数模板18.3类模板【范例18-2】定义一个类模板,接收两个不同数据类型的变量并显示1

5、8.3类模板类模板和模板类的关系类模板是模板的定义,不是一个实实在在的类,而是模板类的抽象,定义中用到通用类型参数。模板类是实实在在的类定义,是类模板的实例化。定义中参数被实际类型所代替。18.3类模板18.4模板的编译模型18.4.1包含编译模型18.4.2分离编译模型18.4.1包含编译模型模板的编译编译器要求看到所有模板的定义存在的问题头文件和源文件的分离解决办法#inlcude18.4.1包含编译模型注意包含编译模型并不是把类模板的声明和定义放在同一个文件里。【范例18-3】18.4.2分离编译模型export关键字函数模板的分离编译exporttemplate

6、nameType>Typesum(Typet1,TypeT2){//...}18.4.2分离编译模型只能export一次,否则可能产生一个链接错误,指出函数模板在多个文件中被定义;编译器可能多次为同一个模板实参集合实例化该函数模板,由于函数模板实例的重复定义,会引起链接错误;编译器可能用其中一个export函数模板定义来实例化函数模板而忽略其他定义。18.4.2分离编译模型类模板的分离编译类模板Queue,头文件Queue.htemplate//类模板声明classQueue{//类定义};源文件Queue.cppexporttemplate

7、nameType>classQueue;#include“Queue.h”18.4.2分离编译模型优点更好地把类模板的接口同其实现分离开问题需要特定编译器支持VisualC++6.0不支持现状一般使用包含编译模型18.5模板的特化18.5.1函数模板的特化18.5.2类模板的特化18.5.3类模板的偏特化18.5.1函数模板的特化格式template<>//特化标志constchar*max(constchar*t1,constchar*t2){retur

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。