模板与命名空间_第1页
模板与命名空间_第2页
模板与命名空间_第3页
模板与命名空间_第4页
模板与命名空间_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、模板与命名空间第1页,共16页,2022年,5月20日,6点48分,星期四13.1 模板的概念与作用模板使函数和类的处理对象参数化,这样的目的是使代码具有通用性,所以模板是实现代码重用机制的一种有效的工具。第2页,共16页,2022年,5月20日,6点48分,星期四13.1.1 模板的概念C+程序的组成单位是函数和类。相应地,模板可以分为函数模板(function template)和类模板(class template)。当定义了模板之后,这个模板就可以处理不同的数据类型,而不必显式地定义针对不同数据类型的各种版本的函数或者类了。模板在使用时也需要进行实例化,模板、函数模板、模板类与对象之间

2、的关系如图13-1所示。第3页,共16页,2022年,5月20日,6点48分,星期四13.1.2 模板的作用为什么要使用模板呢?这是首先需要了解的问题。下面通过实际的例子来说明使用模板的必要性。【示例13-1】对两个整型变量的值进行交换的函数,代码如下。void swap(int& a,int& b)int nTemp = a;/将a的值保存在一个临时变量中a = b;/把b的值赋给ab = nTemp;/b被赋a的原值第4页,共16页,2022年,5月20日,6点48分,星期四13.2 函数模板函数模板是一类可以被实例化的特殊函数,通过它可以操作通用类型的数据。函数模板所处理的数据类型都是通

3、过参数来体现的。在函数模板实例化的过程中,才将这些参数具体为一种特定的数据类型。通过这样的处理方式,在定义函数时不必为每种数据类型都编写重复类似的代码。模板中表示数据类型的参数称为模板参数,这是一种特殊的参数,它能传递一种数据类型。当函数模板接收到这种数据类型并且认为它是合法的,则函数模板会使用它。第5页,共16页,2022年,5月20日,6点48分,星期四13.2.1 函数模板的定义和使用声明一个函数模板参数类型的具体格式如下。template 返回类型 函数名(函数形参表);或者格式如下。template 返回类型 函数名(函数形参表);第6页,共16页,2022年,5月20日,6点48分

4、,星期四13.2.2 重载模板函数模板函数虽然能针对众多的类型,但是也不能针对所有的类型。所以在必要的时候,还是需要重写类似函数。模板函数也可以像普通函数一样被重载。对于模板函数GetMax( ),无法处理char*类型的字符串。第7页,共16页,2022年,5月20日,6点48分,星期四13.3 类模板类模板是将类所处理的对象类型参数化。它使得类中的某些数据成员的参数和返回值能取任意数据类型。类模板的一般定义格式如下。template class 类名/类体;第8页,共16页,2022年,5月20日,6点48分,星期四13.4 命名空间在C+中,变量、函数、结构体、枚举、类以及类和结构体的成

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

6、几种较为常见的命名冲突现象。1相同全局变量的命名3全局命名空间污染第10页,共16页,2022年,5月20日,6点48分,星期四13.4.2 命名空间的概念对于程序中的命名冲突问题,C语言和早期的C+语言没有提供有效的机制来解决这个问题。直到ANSI C+的诞生,利用命名空间来解决这个问题。命名空间是ANSI C+引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。在学习本书前面各章节时,读者已经多次看到在程序中用到了以下语句。using namespace std;第11页,共16页,2022年,5月20日,6点48分,星期四13.4.3 命名空间的使用通过前面的学习可以知道,在引用

7、命名空间成员时,要用命名空间名和作用域分辨符对命名空间成员进行引用限定,以区别不同的命名空间中的同名标识符。对命名空间成员引用的一般格式如下。命名空间名:命名空间成员名第12页,共16页,2022年,5月20日,6点48分,星期四13.4.4 标准命名空间stdC+定义了标准库,标准库也需要解决与其他库的命名冲突问题。为此,C+将标准库中所有的成员放在一个名字为std的命名空间中。std是standard(标准)的缩写形式,它表示命名空间中存放的是与标准库有关的内容。标准头文件中的各种类、函数、对象和类模板等都被包含在此命名空间中。引入标准命名空间的格式如下。using namespace s

8、td;在程序中没有引入标准命名空间时,使用其中的成员,需要使用std来进行限定。第13页,共16页,2022年,5月20日,6点48分,星期四13.4.5 C+头文件的使用在C和C+中都有头文件,它相当于一本书的目录,其主要作用是为用户提供调用而实现的外部接口。例如,一些厂商开发的库不对外公开代码,那么开发者如何才能了解库中的内容?这就要通过头文件来了解。C语言的头文件风格和C+头文件的风格在一定程度上有一定的不同。第14页,共16页,2022年,5月20日,6点48分,星期四13.5 本章实例【实例】约瑟夫(josephus)问题:假设有n个小孩坐成一个环,假如从第一个小孩开始数,如果数到m个小孩,则该小该离开,问最后留下的小孩是第几个小孩?分析:如果总共有6个小孩,围成一圈,从第一个小孩开始,每次数2个小孩,则游戏情况如下。小孩序号:1,2,3,4,5,6。离开小孩序号:2,4,6,3,1。最后获胜小孩序号:5。第15页,共16页,2022年,5月20日,6点48分,星期四13.6 小结本章主要讲述了模板的使用以及命名空间的使用。模板是实现代码重用机制的一种工具,它可以实现参数类型化,即把类型定义为参数,从而实现真正的代码可重用性。模板可分为函数模板和类模板。其中,函数模板是一种能操作通用类型的特殊函数;类模板使用户可以为类定义一种模式,使得类中的某

温馨提示

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

评论

0/150

提交评论