零点起飞学C之命名空间和作用域.pptx
《零点起飞学C之命名空间和作用域.pptx》由会员分享,可在线阅读,更多相关《零点起飞学C之命名空间和作用域.pptx(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第14章 命名空间和作用域命名空间(namespace)是一种将相关的类型进行分组的逻辑命名方案。它将各种命名实体进行分组,各组间可以互不影响,避免出现重名,这与Java的包机制类似。学习本章,读者可以更好理解大型开发中的各种设计规划,更好地深入学习项目构建。14.1 为什么使用命名空间程序员在给对象命名时,一般都会使用一些有意义的记号,这些记号包括单词、汉语拼音,或者缩写等。所以很可能出现多个实体拥有不同的功能却有相同的名称。但是,C+中采用的是单一的全局变量命名空间,在这单一的空间中,实体必须有唯一的名字。但现实中经常会出现同名现象,这种命名冲突被称为名字污染。当然,为了解决这一问题,程序
2、员可以尽量给自己的实体命名一个特有的名字。比如myString、stringOfTom等。甚至可以在实体名称上加上一个随机的编码,如string6547、string82734798等。但是这样做不仅意义不明确,而且无论在使用时还是修改时都很不方便。更为糟糕的是,有时程序员不得不将实体命名为一个简单而容易冲突的名字,如user_name、password、login等。为了从根本上解决名字污染问题,C+引入了命名空间的命名机制,它提供了一种组织相关实体的逻辑方式。可以将命名空间理解为一个文件夹,其内的对象就像一个个文件,不同文件夹内的文件可以重名。在使用重名的文件时,只需要说明是哪个文件夹下的
3、就行了。但它与文件夹又有本质上的区别,命名空间是一种逻辑组合,而不是文件夹那样的物理组合。命名空间为实体提供了上下文环境。一个实体可在多个命名空间中定义,它在不同命名空间中的命名是互不相干的。这样,在一个新的命名空间中可定义任何实体,它们不会与任何已有的实体发生冲突,因为已有的定义都处于其他命名空间中。例如Tom是X公司的员工,另一个Tom是Y公司的员工。由于它们在不同的公司,所以具有相同的名字并不会带来麻烦,因为公司就相当于一个独立的名字空间。如果两人在同一家公司,那将肯定会引起许多不必要的麻烦。14.2 定义命名空间命名空间用namespace来声明,后跟空间的名称,名称之后是由花括号 包
4、含起来的声明块。在一个名字空间内声明的实体被称为名字空间成员(namespace member),每个成员都必须指向该名字空间内的唯一实体,不同的名字空间可以具有相同名字的成员。命名空间的格式如下所示。namsespace space_name.其中,namespace是名字空间的关键字,space_name是空间的名称,花括号内是命名的实体。实体可以是变量(可以带有初始化)、常量、结构体、类等各种类型,也可以是另一个命名空间。把一个实体放在名字空间中并不会改变其意义,唯一的不同是这样的声明所引入的名字要与名字空间名复合起来。程序员可以根据需要设置多个命名空间,每个命名空间名代表一个不同的命名
5、空间域,但是不同的命名空间不能同名。【示例示例14-1】两个名字空间。分析:该示例定义了两个命名空间SpaceA和SpaceB,在两个空间内都有同样的类名A和变量str,但是在使用时并没有引入冲突。注意:名字空间的说明与类的声明有点儿像,但是它不能以“;”结束。名字空间的定义可以是不连续的。可以将一个名字空间拆成多个部分或跨越多个文件,但却具有同一个名字。这时它们都将属于同一个名字空间,既名字空间的定义是可累积的。例如,如果在上例中还有如下语句,变量hello将和类A和串str同属空间SpaceA。namespace SpaceAchar*hello=hello world;还可以将上述语句放
6、在另一个文件内,使用时将该文件引入,这样字符串hello仍然和示例中的命名空间SpaceA是同一个空间。名字空间还可以嵌套,既在名字空间内还可以有另一个名字空间。例如,在示例14-1的名字空间SpaceA内还可以定义另一个名字空间SpaceAA。【示例示例14-2】在示例14-1中嵌入另一个空间的定义。分析:空间SpaceAA被空间SpaceA嵌套在内部,它的成员声明被隐藏在该嵌套域中。这样的成员会被自动地加上最外层名字空间名,形成多空间前缀。所以,如果使用它就需要写成:SpaceA:SpaceAA:str;此外,名字空间中的名字部分也可以省略,这时就定义了一个未命名的名字空间。例如,将示例中
7、namespace SpaceB的名称SpaceB去掉,就定义了一个未命名的名字空间。未命名空间的实体将只在定义它的文件内有效。不像其他的名字空间,未命名的名字空间的定义局部于定义它的文件内,而不能跨越多个文本文件。14.3 如何使用命名空间使用命名空间有两种方法:域限定符和使用using声明。下面将分别介绍它们的用法和别名的用法。1使用域限定符域限定符是:,其使用方法如下所示。space_name:space_member;如果命名空间是嵌套的,则要连续写出所有空间名。space_name1:space_name2:.:space_nameN:space_member;但是,如果实体在未命名
8、的空间内,则可以直接访问,就像一个全局变量一样。2使用using声明命名空间一个using声明一次只能作用于一个命名空间,它明确指出了用到的命名空间。其格式如下:using namespace name_space;using name_space:space_memeber;第一种方式表示将命名空间引入到该文件中,以后对该命名空间内的成员访问时,就不需要加完整的空间限定了。第二种方式表示只引入space_member这一个成员,而其他成员不可见。3别名有时名字空间的命名太长不方便使用,这时可以给它定义一个别名。namespace othername=space_name;当使用space_n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 零点 起飞 命名 空间 作用
限制150内