类模板
2016-05-27 19:29
211 查看
注意:声明的泛指类型T可用于声明成员变量和成员函数
"test.hpp"指定的cpp文件中去,这里面之所以表面上分开存放在hpp文件和cpp文件中,是为了开发的时候,使得代码工程清晰明了,有层次感!
1.类模板是函数模板的升级:
a.c++中可以将模板的思想应用于类,使得类可以不关注具体所操作的数据类型,而只关注类所需要实现的功能。 b.函数模板是使一个函数体适合各种类型的数据,类模板是使一个类适合各种类型的数据(包括成员函数和成员变量,当使得成员函数满足各种类型的数据的时候,其实就是在使用函数模板,所以说类模板是函数模板的升级) ,函数模板是类模板中的一部分。 c.类模板常用于一些存储和组织数据元素的类中,如:数组类、链表类、stack类、queue类等2.类模板的语法规则:
a.类模板的作用就是提供一种特殊的类以相同的行为处理不同的类型 b.类模板的使用跟函数模板的使用一样,在定义类的前面声明template ,说明类中使用泛指类型T c.类模板的应用,当使用类模板定义对象时,要指明具体类型,如:test t1 即t1就是满足int类型的对象 示例代码,如下:3.类模板的深入理解:
a.对于函数模板,编译器进行了两次编译,第一次是直接对函数模板进行编译,看函数模板是否存在语法错误。第二次是在指明类型,让函数模板创建出具体类型的函数,调用具体类型的函数的时候,对具体函数进行编译。最终程序中只存在具体类型的函数,不存在函数模板。 b.类模板跟函数模板的处理方式是一样的,也是进行两次编译,第一次是对类模板进行编译,判断类模板是否存在语法错误。第二次是在类模板创建出具体类型的对象之后 test t1 ,当t1对象调用类模板中的成员函数的时候,调用那个成员函数就会产生那个类模板成员函数的具体类型的函数(这里是int类型的函数),没调用的类模板成员函数则不会产生可执行代码,调用的类模板成员函数才会产生具体类型的函数(具体类型是根据调用者的对象决定的),才会产生可执行代码。4.函数模板与类模板的工程应用:
a.一般在工程中,函数的实现和函数的调用是在不同的文件中的,类的实现和类的使用也是在不同的文件中的。但是对于函数模板和类模板,模板的实现和使用必须在同一个文件中。因为模板是要在使用的时候,进行二次编译的,如果不在同一个文件中,当使用模板的时候编译器进行二次编译就找不到模板了。会产生链接错误!所以函数模板和类模板不能像普通函数和普通类一样分开实现后,在使用时只包括头文件!必须要把使用和实现放在一起。在工程实践中,一般会把类模板的定义直接放在头文件中,此时使用的头文件不再是 .h文件了,是 .hpp文件。hpp文件,就是告诉程序员,其中存放的是模板的实现,其实在编译的时候,hpp文件中的内容会被包含到#include"test.hpp"指定的cpp文件中去,这里面之所以表面上分开存放在hpp文件和cpp文件中,是为了开发的时候,使得代码工程清晰明了,有层次感!
相关文章推荐
- MFC中用OPENCV如何将图片显示在指定位置?
- 第13周 阅读程序,写出运行结果。(3)纯虚函数
- avfoundation 视频合成 ,合成两段视频和一段音频
- 第二阶段—个人工作总结05
- 丑数
- (Java)用一个“点”类表示三维空间的点,计算该点距离某点的距离
- Java集合框架List,Map,Set等全面介绍
- NYOJ - 37 回文字符串
- swift navgationcontroller的使用
- Mac终端(Terminal)自定义颜色,字体,背景
- Android主题换肤实现
- 浪潮之巅阅读笔记02
- swift 搭建tabbarcontroller
- 机器视觉工具包程序 Machine Vision Toolbox
- matlab实现图像预处理的很多方法
- Exception in thread "main" org.hibernate.TransactionException: commit failed
- net.sf.json.JSONException: Found starting '{' but missing '}' at the end. at character 0 of null
- 软件工程练习——找水王2
- 小鱼人的华丽变身-皮肤模型替换
- ios avfoundation 合并音频到一个视频文件 avurlassettrack