第13章 模板与命名空间.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第13章 模板与命名空间.ppt

第13章 模板与命名空间 模板是C++的另一个重要的技术,它支持参数化多态性。参数化多态性是指将一段程序所处理的对象类型参数化。利用模板技术可以使程序处理某个类型范围之内的各种类型的对象,这样就实现了高效率的代码重用。利用模板技术可以使开发者快速建立具有类型安全的、通用的函数集合和类库集合,方便了大规模的软件开发。通过本章的学习,读者可以有效地把握模板的使用,认识标准模板库并能正确地使用它。 13.1 模板的概念与作用 模板使函数和类的处理对象参数化,这样的目的是使代码具有通用性,所以模板是实现代码重用机制的一种有效的工具。 13.1.1 模板的概念 C++程序的组成单位是函数和类。相应地,模板可以分为函数模板(function template)和类模板(class template)。当定义了模板之后,这个模板就可以处理不同的数据类型,而不必显式地定义针对不同数据类型的各种版本的函数或者类了。 模板在使用时也需要进行实例化,模板、函数模板、模板类与对象之间的关系如图13-1所示。 13.1.2 模板的作用 为什么要使用模板呢?这是首先需要了解的问题。下面通过实际的例子来说明使用模板的必要性。 【示例13-1】对两个整型变量的值进行交换的函数,代码如下。 void swap(int a,int b){ int nTemp = a; //将a的值保存在一个临时变量中 a = b; //把b的值赋给a b = nTemp; //b被赋a的原值 } 13.2 函数模板 函数模板是一类可以被实例化的特殊函数,通过它可以操作通用类型的数据。函数模板所处理的数据类型都是通过参数来体现的。在函数模板实例化的过程中,才将这些参数具体为一种特定的数据类型。通过这样的处理方式,在定义函数时不必为每种数据类型都编写重复类似的代码。模板中表示数据类型的参数称为模板参数,这是一种特殊的参数,它能传递一种数据类型。当函数模板接收到这种数据类型并且认为它是合法的,则函数模板会使用它。 13.2.1 函数模板的定义和使用 声明一个函数模板参数类型的具体格式如下。 template class 类型标识符返回类型 函数名(函数形参表); 或者格式如下。 template typename类型标识符返回类型 函数名(函数形参表); 13.2.2 重载模板函数 模板函数虽然能针对众多的类型,但是也不能针对所有的类型。所以在必要的时候,还是需要重写类似函数。模板函数也可以像普通函数一样被重载。对于模板函数GetMax( ),无法处理char*类型的字符串。 13.3 类模板 类模板是将类所处理的对象类型参数化。它使得类中的某些数据成员的参数和返回值能取任意数据类型。 类模板的一般定义格式如下。 template 类型参数表 class 类名 { //类体 }; 13.4 命名空间 在C++中,变量、函数、结构体、枚举、类以及类和结构体的成员等都有命名。随着工程的增大,这种命名相互冲突的可能性就增大了。使用多个厂商提供的类库时,也可能导致命名的冲突。命名空间是ANSI C++引入的,可以很好的控制户命名的作用域。 13.4.1 程序中的命名冲突分析 在前面讲解函数时,简单学习了C++语言中的变量作用域。C++中,作用域包括文件作用域、函数作用域、复合语句作用域和类作用域等。在不同的作用域中,定义具有相同名字的变量是合法的,它们是互不干扰的,编译系统可以区分并正确使用它们。在C++中,由于体系较为庞大,对变量的定义和引用可能会产生同名现象,从而导致命名的重复和引用的不确定性。下面分析几种较为常见的命名冲突现象。 1.相同全局变量的命名 3.全局命名空间污染 13.4.2 命名空间的概念 对于程序中的命名冲突问题,C语言和早期的C++语言没有提供有效的机制来解决这个问题。直到ANSI C++的诞生,利用命名空间来解决这个问题。命名空间是ANSI C++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。在学习本书前面各章节时,读者已经多次看到在程序中用到了以下语句。 using namespace std; 13.4.3 命名空间的使用 通过前面的学习可以知道,在引用命名空间成员时,要用命名空间名和作用域分辨符对命名空间成员进行引用限定,以区别不同的命名空间中的同名标识符。对命名空间成员引用的一般格式如下。 命名空间名::命名空间成员名 13.4.4 标准命名空间std C++定义了标准库,标准库也需要解决与其他库的命名冲突问题。为此,C++将标准库中所有的成员放在一个名字为std的命名空间中。std是standard(标准)的缩写形式,它表示命名空间中存放的是与标准库有关的内容。标准头文件中的各种类、函数、对象和类模

文档评论(0)

cai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档