第13章 模板与命名空间

第13章 模板与命名空间

ID:38463469

大小:68.50 KB

页数:16页

时间:2019-06-13

第13章  模板与命名空间_第1页
第13章  模板与命名空间_第2页
第13章  模板与命名空间_第3页
第13章  模板与命名空间_第4页
第13章  模板与命名空间_第5页
资源描述:

《第13章 模板与命名空间》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第13章模板与命名空间模板是C++的另一个重要的技术,它支持参数化多态性。参数化多态性是指将一段程序所处理的对象类型参数化。利用模板技术可以使程序处理某个类型范围之内的各种类型的对象,这样就实现了高效率的代码重用。利用模板技术可以使开发者快速建立具有类型安全的、通用的函数集合和类库集合,方便了大规模的软件开发。通过本章的学习,读者可以有效地把握模板的使用,认识标准模板库并能正确地使用它。13.1模板的概念与作用模板使函数和类的处理对象参数化,这样的目的是使代码具有通用性,所以模板是实现代码重用机制的一种有效的工具。13.1.1模板的概念C++程序的组成单位是函数和类。相

2、应地,模板可以分为函数模板(functiontemplate)和类模板(classtemplate)。当定义了模板之后,这个模板就可以处理不同的数据类型,而不必显式地定义针对不同数据类型的各种版本的函数或者类了。模板在使用时也需要进行实例化,模板、函数模板、模板类与对象之间的关系如图13-1所示。13.1.2模板的作用为什么要使用模板呢?这是首先需要了解的问题。下面通过实际的例子来说明使用模板的必要性。【示例13-1】对两个整型变量的值进行交换的函数,代码如下。voidswap(int&a,int&b){intnTemp=a;//将a的值保存在一个临时变量中a=b;//

3、把b的值赋给ab=nTemp;//b被赋a的原值}13.2函数模板函数模板是一类可以被实例化的特殊函数,通过它可以操作通用类型的数据。函数模板所处理的数据类型都是通过参数来体现的。在函数模板实例化的过程中,才将这些参数具体为一种特定的数据类型。通过这样的处理方式,在定义函数时不必为每种数据类型都编写重复类似的代码。模板中表示数据类型的参数称为模板参数,这是一种特殊的参数,它能传递一种数据类型。当函数模板接收到这种数据类型并且认为它是合法的,则函数模板会使用它。13.2.1函数模板的定义和使用声明一个函数模板参数类型的具体格式如下。template

4、返回类型函数名(函数形参表);或者格式如下。template返回类型函数名(函数形参表);13.2.2重载模板函数模板函数虽然能针对众多的类型,但是也不能针对所有的类型。所以在必要的时候,还是需要重写类似函数。模板函数也可以像普通函数一样被重载。对于模板函数GetMax(),无法处理char*类型的字符串。13.3类模板类模板是将类所处理的对象类型参数化。它使得类中的某些数据成员的参数和返回值能取任意数据类型。类模板的一般定义格式如下。template<类型参数表>class类名{//类体};13.4命名空间在C++中,变量、函数、结构体、

5、枚举、类以及类和结构体的成员等都有命名。随着工程的增大,这种命名相互冲突的可能性就增大了。使用多个厂商提供的类库时,也可能导致命名的冲突。命名空间是ANSIC++引入的,可以很好的控制户命名的作用域。13.4.1程序中的命名冲突分析在前面讲解函数时,简单学习了C++语言中的变量作用域。C++中,作用域包括文件作用域、函数作用域、复合语句作用域和类作用域等。在不同的作用域中,定义具有相同名字的变量是合法的,它们是互不干扰的,编译系统可以区分并正确使用它们。在C++中,由于体系较为庞大,对变量的定义和引用可能会产生同名现象,从而导致命名的重复和引用的不确定性。下面分析几种较

6、为常见的命名冲突现象。1.相同全局变量的命名3.全局命名空间污染13.4.2命名空间的概念对于程序中的命名冲突问题,C语言和早期的C++语言没有提供有效的机制来解决这个问题。直到ANSIC++的诞生,利用命名空间来解决这个问题。命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。在学习本书前面各章节时,读者已经多次看到在程序中用到了以下语句。usingnamespacestd;13.4.3命名空间的使用通过前面的学习可以知道,在引用命名空间成员时,要用命名空间名和作用域分辨符对命名空间成员进行引用限定,以区别不同的命名空间中的同名标识符。

7、对命名空间成员引用的一般格式如下。命名空间名::命名空间成员名13.4.4标准命名空间stdC++定义了标准库,标准库也需要解决与其他库的命名冲突问题。为此,C++将标准库中所有的成员放在一个名字为std的命名空间中。std是standard(标准)的缩写形式,它表示命名空间中存放的是与标准库有关的内容。标准头文件中的各种类、函数、对象和类模板等都被包含在此命名空间中。引入标准命名空间的格式如下。usingnamespacestd;在程序中没有引入标准命名空间时,使用其中的成员,需要使用std来进行限定。13.4.5C++头文件的使用在C

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

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

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