零点起飞学C之命名空间和作用域.pptx

零点起飞学C之命名空间和作用域.pptx

ID:52970289

大小:323.95 KB

页数:27页

时间:2020-04-05

零点起飞学C之命名空间和作用域.pptx_第1页
零点起飞学C之命名空间和作用域.pptx_第2页
零点起飞学C之命名空间和作用域.pptx_第3页
零点起飞学C之命名空间和作用域.pptx_第4页
零点起飞学C之命名空间和作用域.pptx_第5页
资源描述:

《零点起飞学C之命名空间和作用域.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第14章命名空间和作用域命名空间(namespace)是一种将相关的类型进行分组的逻辑命名方案。它将各种命名实体进行分组,各组间可以互不影响,避免出现重名,这与Java的包机制类似。学习本章,读者可以更好理解大型开发中的各种设计规划,更好地深入学习项目构建。14.1为什么使用命名空间程序员在给对象命名时,一般都会使用一些有意义的记号,这些记号包括单词、汉语拼音,或者缩写等。所以很可能出现多个实体拥有不同的功能却有相同的名称。但是,C++中采用的是单一的全局变量命名空间,在这单一的空间中,实体必须有唯一的名字。但现实中经常会出现同名现象,这种命

2、名冲突被称为名字污染。当然,为了解决这一问题,程序员可以尽量给自己的实体命名一个特有的名字。比如myString、stringOfTom等。甚至可以在实体名称上加上一个随机的编码,如string6547、string82734798等。但是这样做不仅意义不明确,而且无论在使用时还是修改时都很不方便。更为糟糕的是,有时程序员不得不将实体命名为一个简单而容易冲突的名字,如user_name、password、login等。为了从根本上解决名字污染问题,C++引入了命名空间的命名机制,它提供了一种组织相关实体的逻辑方式。可以将命名空间理解为一个文件

3、夹,其内的对象就像一个个文件,不同文件夹内的文件可以重名。在使用重名的文件时,只需要说明是哪个文件夹下的就行了。但它与文件夹又有本质上的区别,命名空间是一种逻辑组合,而不是文件夹那样的物理组合。命名空间为实体提供了上下文环境。一个实体可在多个命名空间中定义,它在不同命名空间中的命名是互不相干的。这样,在一个新的命名空间中可定义任何实体,它们不会与任何已有的实体发生冲突,因为已有的定义都处于其他命名空间中。例如Tom是X公司的员工,另一个Tom是Y公司的员工。由于它们在不同的公司,所以具有相同的名字并不会带来麻烦,因为公司就相当于一个独立的名字

4、空间。如果两人在同一家公司,那将肯定会引起许多不必要的麻烦。14.2定义命名空间命名空间用namespace来声明,后跟空间的名称,名称之后是由花括号{}包含起来的声明块。在一个名字空间内声明的实体被称为名字空间成员(namespacemember),每个成员都必须指向该名字空间内的唯一实体,不同的名字空间可以具有相同名字的成员。命名空间的格式如下所示。namsespacespace_name{...}其中,namespace是名字空间的关键字,space_name是空间的名称,花括号内是命名的实体。实体可以是变量(可以带有初始化)、常量、结

5、构体、类等各种类型,也可以是另一个命名空间。把一个实体放在名字空间中并不会改变其意义,唯一的不同是这样的声明所引入的名字要与名字空间名复合起来。程序员可以根据需要设置多个命名空间,每个命名空间名代表一个不同的命名空间域,但是不同的命名空间不能同名。【示例14-1】两个名字空间。分析:该示例定义了两个命名空间SpaceA和SpaceB,在两个空间内都有同样的类名A和变量str,但是在使用时并没有引入冲突。注意:名字空间的说明与类的声明有点儿像,但是它不能以“;”结束。名字空间的定义可以是不连续的。可以将一个名字空间拆成多个部分或跨越多个文件,

6、但却具有同一个名字。这时它们都将属于同一个名字空间,既名字空间的定义是可累积的。例如,如果在上例中还有如下语句,变量hello将和类A和串str同属空间SpaceA。namespaceSpaceA{char*hello="helloworld";}还可以将上述语句放在另一个文件内,使用时将该文件引入,这样字符串hello仍然和示例中的命名空间SpaceA是同一个空间。名字空间还可以嵌套,既在名字空间内还可以有另一个名字空间。例如,在示例14-1的名字空间SpaceA内还可以定义另一个名字空间SpaceAA。【示例14-2】在示例14-1中嵌入

7、另一个空间的定义。分析:空间SpaceAA被空间SpaceA嵌套在内部,它的成员声明被隐藏在该嵌套域中。这样的成员会被自动地加上最外层名字空间名,形成多空间前缀。所以,如果使用它就需要写成:SpaceA::SpaceAA::str;此外,名字空间中的名字部分也可以省略,这时就定义了一个未命名的名字空间。例如,将示例中namespaceSpaceB的名称SpaceB去掉,就定义了一个未命名的名字空间。未命名空间的实体将只在定义它的文件内有效。不像其他的名字空间,未命名的名字空间的定义局部于定义它的文件内,而不能跨越多个文本文件。14.3如何使用

8、命名空间使用命名空间有两种方法:域限定符和使用using声明。下面将分别介绍它们的用法和别名的用法。1.使用域限定符域限定符是::,其使用方法如下所示。space_

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

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

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