版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第1515章章 名称空间名称空间 名称空间是名称空间是C+引入的一种新的作用域,引入的一种新的作用域,属于属于C+的高级特征,它用于减少软件项目中的高级特征,它用于减少软件项目中的命名冲突。的命名冲突。 同一名称空间中的标识符名必须惟一,不同一名称空间中的标识符名必须惟一,不同名称空间中的标识符名可以相同。当一个程同名称空间中的标识符名可以相同。当一个程序引用多个名称空间而出现成员同名时,可以序引用多个名称空间而出现成员同名时,可以用名称空间加作用域运算符限定成员。用名称空间加作用域运算符限定成员。15.1 15.1 名称空间的定义名称空间的定义 保留字保留字namespace用于定义名称空
2、间。名称空间用于定义名称空间。名称空间必须在程序的全局作用域内定义,不能在函数及函必须在程序的全局作用域内定义,不能在函数及函数成员内定义,最外层名称空间的名称必须在程序数成员内定义,最外层名称空间的名称必须在程序的全局作用域惟一。的全局作用域惟一。 没有名称的名称空间称为匿名名称空间,每个没有名称的名称空间称为匿名名称空间,每个程序只能有一个匿名名称空间。程序只能有一个匿名名称空间。 名称空间可以分多次定义,即可以先在初始定名称空间可以分多次定义,即可以先在初始定义中定义一部分成员,然后在扩展定义中再定义另义中定义一部分成员,然后在扩展定义中再定义另一部分成员,或者再定义初始定义说明的函数原
3、型。一部分成员,或者再定义初始定义说明的函数原型。初始定义和扩展定义的语法格式相同。初始定义和扩展定义的语法格式相同。 保留字保留字using用于说明程序要引入的名称空间成用于说明程序要引入的名称空间成员,或者用于指示程序要引用的名称空间。员,或者用于指示程序要引用的名称空间。 在说明引用名称空间的某个成员之前,该成员在说明引用名称空间的某个成员之前,该成员必须已经在名称空间中进行了说明或进行了定义。必须已经在名称空间中进行了说明或进行了定义。【例】【例】 分析以下程序的执行结果。分析以下程序的执行结果。#include namespace NS1 /初始定义名称空间初始定义名称空间NS1ex
4、tern int x;/说明整型变量说明整型变量xvoid fun(int);/说明函数说明函数fun(int)void fun(long)/定义函数定义函数fun(long) cout Processing a long argument endl; namespace NS1 /扩展定义名称空间扩展定义名称空间NS1int x=5;/定义整型变量定义整型变量xvoid fun(int) /定义函数定义函数fun(int) cout Processing a int argument endl; void main() int y=20;using NS1:x;/说明引用变量说明引用变量xu
5、sing NS1:fun;/说明引用函数说明引用函数fun()x=10;fun(4);fun(4L);cout x= x endl;cout y= y endl; Processing a int argument Processing a long argument x=10 y=20 访问名称空间的成员有三种方式:访问名称空间的成员有三种方式: 说明引用成员(使用说明引用成员(使用using语句)语句) 直接访问成员直接访问成员 指定名称空间(使用指定名称空间(使用using namespace语句)语句) 在上例的程序中,通过在上例的程序中,通过using说明要引用的成员,说明要引用的成
6、员,访问访问NS1的数据成员的数据成员x、函数成员、函数成员fun(int)和和fun(long)。 直接访问成员的形式如下:直接访问成员的形式如下: 名称空间名称名称空间名称:成员名称成员名称 因此,直接访问总能惟一地访问指定名称空间的因此,直接访问总能惟一地访问指定名称空间的成员。成员。 注意:通过注意:通过using语句可将指定的成员引入到当语句可将指定的成员引入到当前作用域中,但是同一个作用域内不允许存在相同前作用域中,但是同一个作用域内不允许存在相同名称的成员。名称的成员。【例】分析以下程序的执行结果。【例】分析以下程序的执行结果。#include namespace NS1 voi
7、d fun() cout NS1 endl; namespace NS2 void fun() cout NS2 endl; void main()NS1:fun();/直接访问直接访问NS1的的fun()NS2:fun();/直接访问直接访问NS2的的fun() NS1 NS2【例】分析以下程序的错误并改正。【例】分析以下程序的错误并改正。#include namespace NS1 int x=10;namespace NS2 int x=20;void main() using NS1:x; cout x= x endl; using NS2:x; cout x= x endl; 为此,
8、引用名称空间为此,引用名称空间NS2中的中的x可采用直接访问成可采用直接访问成员方法,程序改正如下:员方法,程序改正如下:#include namespace NS1 int x=10;namespace NS2 int x=20;void main() using NS1:x; cout x= x endl; cout x= NS2:x endl; x=10 x=20 15.2 15.2 名称空间的嵌套名称空间的嵌套 名称空间也可以像类那样嵌套,形成多个层次名称空间也可以像类那样嵌套,形成多个层次的作用域。因此,在访问名称空间的成员时,就有的作用域。因此,在访问名称空间的成员时,就有可能使用
9、多个作用域运算符。可能使用多个作用域运算符。【例】分析以下程序的执行结果。【例】分析以下程序的执行结果。#include namespace NS1 /NS1的初始定义的初始定义int x=10;void fun1() cout NS1s fun1() endl; namespace NS2 /嵌套名称空间嵌套名称空间int y=20;void fun2() cout NS2s fun2() endl; using NS1:fun1;/using说明说明,全局名称空间限定全局名称空间限定fun1using NS1:x; /using说明说明,全局名称空间限定全局名称空间限定xusing NS1
10、:NS2:fun2; /using说明说明,多重名称空间限定多重名称空间限定fun2using NS1:NS2:y; /using说明说明,多重名称空间限定多重名称空间限定yvoid main() fun1(); fun2(); cout x= x endl; cout y= y endl;NS1s fun1()NS2s fun2()x=10y=2015.3 std15.3 std名称空间名称空间 我们先看一个程序:我们先看一个程序: #include void main() int x; std:cin x; std:cout x= x std:endl; 上述程序的第一行是一个预处理命令,
11、它不同于上述程序的第一行是一个预处理命令,它不同于命令:命令: #include iostream.h头文件包含了头文件包含了iostream类的说明定类的说明定义,即定义了被义,即定义了被iostream类使用的类、值、宏和函类使用的类、值、宏和函数等。而数等。而iostream头文件是头文件是C+标准头文件。标准头文件。 注意:在注意:在C+中以中以.h为扩展名的头文件是为扩展名的头文件是“旧样旧样式的式的”,很多已被不带,很多已被不带.h扩展名的标准头文件所取扩展名的标准头文件所取代,就像代,就像iostream头文件可以取代头文件可以取代iostream.h头文件头文件一样。一样。 上
12、述程序的第一行包含来自标准库的头文件的上述程序的第一行包含来自标准库的头文件的ANSIISO标准标准C+样式。程序的第样式。程序的第5行的语句使用行的语句使用标准输入流标准输入流cin和流提取运算符和流提取运算符来从键盘得到一个来从键盘得到一个值。使用流提取运算符,值。使用流提取运算符,std:cin可以从标准输入流可以从标准输入流得到数据输入。得到数据输入。 程序的第程序的第6行的语句使用标准输出流行的语句使用标准输出流cout和流和流插入运算符插入运算符来输出数据。使用流插入运算符,来输出数据。使用流插入运算符,std:cout可以将数据输出到标准输出流中。可以将数据输出到标准输出流中。
13、上述程序中,我们在上述程序中,我们在cout、cin和和endl之前都之前都加有加有std:,当我们使用预处理命令,当我们使用预处理命令#include ,使用,使用cout、cin和和endl等时必须加上等时必须加上std:。实际上,符号。实际上,符号std:cout说明正在使用的名说明正在使用的名称,这个名称就是称,这个名称就是cout,而,而std就是名称空间,也就是名称空间,也称为标准名称空间。称为标准名称空间。std名称空间不是用户定义的,名称空间不是用户定义的,而是由系统指定的,但可以像用户定义的名称空而是由系统指定的,但可以像用户定义的名称空间一样使用它。间一样使用它。 结合我们
14、在上一节介绍的名称空间使用方法,结合我们在上一节介绍的名称空间使用方法,可以将前面的程序修改为以下两种方式实现:可以将前面的程序修改为以下两种方式实现: /使用使用using语句引入了相关的名称语句引入了相关的名称 #include void main() using std:cout;/引入引入coutusing std:cin;/引入引入cinusing std:endl;/引入引入endlint x;cin x;cout x= x endl; 或者:或者: /使用使用using namespace语句指定可以引用的名称空间语句指定可以引用的名称空间 #include void main() using namespace std; /可以访问可以访问std名称空间的所有成员名称空间的所有成员int x;cin x;cout x= x endl; 标准化委员会为包装了标准化委员会为包装了std的那部分标准库构建新的头的那部分标准库构建新的头文件名,即将现有文件名,即将现有C+头文件名中的头文件名中的.h去掉,所以就出去掉,所以就出现了现了和和等很多双
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 白质损伤与创伤性脑损伤继发损伤-洞察及研究
- P2P平台风险管理研究-洞察及研究
- 胆茶碱在高脂血症治疗中的作用机制-洞察及研究
- 量子计算在系数矩阵分解中的应用研究-洞察及研究
- 电网负荷预测-洞察及研究
- 安全生产保证金管理制度
- 环卫所安全生产制度范本
- 林业安全生产约谈制度
- 公司安全生产周例会制度
- 妇幼保健所安全生产制度
- (高清版)AQ∕T 2081-2023 金属非金属矿山在用带式输送机安全检测检验规范
- 西师版 三年级下册数学 全册 预习单及答案
- 小学六年级上册数学期末测试卷及参考答案(轻巧夺冠)
- DZ∕T 0130-2006 地质矿产实验室测试质量管理规范(正式版)
- (高清版)JGJT 178-2009 补偿收缩混凝土应用技术规程
- 电梯日管控、周排查、月调度内容表格
- QC-提高卫生间防水一次验收合格率
- 江苏省徐州市2022-2023学年高一上学期期末抽测政治试题(原卷版)
- 地基处理施工中的安全风险与防范
- 人教版六年级科学上期末测试题(2份)有答案
- 食品安全全球标准BRCGS第9版内部审核全套记录
评论
0/150
提交评论