- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第13章 模板与命名空间 模板是C++的另一个重要的技术,它支持参数化多态性。参数化多态性是指将一段程序所处理的对象类型参数化。利用模板技术可以使程序处理某个类型范围之内的各种类型的对象,这样就实现了高效率的代码重用。 13.1 模板的概念与作用 模板使函数和类的处理对象参数化,这样的目的是使代码具有通用性,所以模板是实现代码重用机制的一种有效的工具。 13.1.1 模板的概念 在程序中,某个程序的功能一般是针对某种特定类型的,此时这个程序只能对这种数据类型进行处理。如果将这种特定的数据类型说明为参数,则这个加以修改后可以处理不同的数据类型,此时这个程序就可以被改造为模板。 13.1.2 模板的作用 为什么要使用模板呢?这是首先需要了解的问题。下面通过实际的例子来说明使用模板的必要性。 13.2 函数模板 函数模板是一类可以被实例化的特殊函数,通过它可以操作通用类型的数据。函数模板所处理的数据类型都是通过参数来体现的。在函数模板实例化的过程中,才将这些参数具体为一种特定的数据类型。通过这样的处理方式,在定义函数时不必为每种数据类型都编写重复类似的代码。模板中表示数据类型的参数称为模板参数,这是一种特殊的参数,它能传递一种数据类型。 13.2.1 函数模板的定义和使用 声明一个函数模板参数类型的具体格式如下。 template class 类型标识符返回类型 函数名(函数形参表); 或者: template typename类型标识符返回类型 函数名(函数形参表); 13.2.2 重载模板函数 模板函数虽然能针对众多的类型,但是也不能针对所有的类型。所以在必要的时候,还是需要重写类似函数。模板函数也可以象普通函数一样被重载。对于模板函数GetMax( ),无法处理char*类型的字符串。 13.3 类模板 类模板是将类所处理的对象类型参数化。它使得类中的某些数据成员的参数和返回值能取任意数据类型。 13.4 命名空间 命名空间是ANSIC++引入的、可以由用户命名的作用域,用来处理程序中常见的同名冲突。 13.4.1 程序中的命名冲突分析 在前面讲解函数时,简单学习了C++语言中的变量作用域。在C++中,作用域包括文件作用域、函数作用域、复合语句作用域和类作用域等。在不同的作用域中,定义具有相同名字的变量是合法的,它们是互不干扰的,编译系统可以区分并正确使用它们。在C++中,由于体系较为庞大,对变量等的定义和引用可能会产生同名现象,从而导致命名的重复和引用的不确定性。下面分析几种较为常见的命名冲突现象。 1.相同的全局变量的命名 2.名字冲突。 3.全局命名空间污染 13.4.2 命名空间的概念 对于程序中的命名冲突问题,C语言和早期的C++语言没有提供有效的机制来解决这个问题。直到ANSI C++的诞生,利用命名空间来解决这个问题。命名空间是ANSI C++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。 13.4.3 命名空间的使用 通过前面的学习可以知道,在引用命名空间成员时,要用命名空间名和作用域分辨符对命名空间成员进行引用限定,以区别不同的命名空间中的同名标识符。使用命名空间,主要有以下几种使用方法。 1.命名空间的别名 2.使用using引入命名空间中的成员 3.使用using namespace引入命名空间 4.无名的命名空间 13.4.4 标准命名空间std C++定义了标准库,标准库也需要解决与其他库的命名冲突问题。为此,C++将标准库中所有的成员放在一个名字为std的命名空间中。std是standard(标准)的缩写形式,它表示命名空间中存放的是与标准库有关的内容。标准头文件中的各种类、函数、对象和类模板等都被包含在此命名空间中。 13.4.5 C++头文件的使用 在C和C++中都有头文件,它相当于一本书的目录,其主要作用是为用户提供调用而实现的外部接口。例如,一些厂商开发的库不对外公开代码,那么开发者如何才能了解库中的内容?这就要通过头文件来了解。 1.C语言风格的头文件 2.C++中的新头文件风格 13.5 本章实例 约瑟夫(josephus)问题:假设有n个小孩坐成一个环,假如从第一个小孩开始数,如果数到m个小孩,则该小该离开,问最后留下的小孩是第几个小孩? 13.6 小结 本章主要讲述了模板的使用以及命名空间的使用。模板是实现代码重用机制的一种工具,它可以实现参数类型化,即把类型定义为参数,从而实现真正的代码可重用性。模板可分为函数模板和类模板。其中,函数模板是一种能操作通用类型的特殊函数;类模板使用户可以为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数和返回值能取任意数据类型。命名空间是ANSI C++引入的可以由用户命名的作用域,用来处理
原创力文档


文档评论(0)