录入查看excel代码的方法教程步骤-英雄云拓展知识分享
69
2023-11-01
【摘要】 本书摘自《C++程序开发案例课堂》一书中第2章,第4节,由刘春茂、李琪编著。
2.4 命名空间
在书写程序的时候,很多时候都要用到 namespace, 那么这个namespace 是什么呢?
2.4.1 命名空间的定义
命名空间(namespace)是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同一 个集团的声明放在同一个命名空间中。
在 C++ 中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类、对象等。 在大规模程序的设计中,以及在程序员使用各种各样的 C++ 库时,为了避免这些标识符的命 名发生冲突,标准 C++ 引入了关键字 namespace(命名空间/名字空间/名称空间/名域),可以更 好地控制标识符的作用域。
原来C++ 标识符的作用域分成三级:代码块({……},如复合语句和函数体)、类和全局。 现在,在其中的类和全局之间,标准C++ 又添加了命名空间这一个作用域级别。
命名空间可以是全局的,也可以位于另一个命名空间之中,但是不能位于类和代码块 中。所以,在命名空间中声明的标识符,默认具有外部链接特性(除非它引用了常量)。
在所有命名空间之外,还存在一个全局命名空间,它对应于文件级的声明域。因此,在 命名空间机制中,原来的全局变量,现在被认为位于全局命名空间中。
有两种形式的命名空间 有名的和无名的。代码如下:
named-namespace-definition:
namespaceidentifier{namespace-body}
unnamed-namespace-definition:
namespace(namespace-body}
namespace-body:
declaration-seqopt
下面通过一个例子来说明如何定义命名空间。
【例2-6】定义命名空间(代码2-6.txt)。
新建名为 mmkjtest 的 C++SourceFile 源程序。源代码如下:
Hincludeusing namespace std;
//using namespace 编译表示,在C++标准类库中定义的名字在本程序中可以使用 //否则,iostream、string 等c++标准类就不可见了,编译就会出错
//两个在不同命名空间中定义的名字相同的变量
namespace myowna{
string user name="命名空间a";
namespace myownb(
string user name="命名空间b";
int main()
cout<<""
<<"您好!"
< <<"被成功调用了"< cout<<"" <<"您好!" << myownb::user name//用命名空间限制符访问myownb 的变量 user name <<"被成功调用了"< system("pause"); return 0; 【代码剖析】 在本例中,定义了两个命名空间,分别是 myowna 和 myownb, 每个命名空间都定义了一个 变量 user name。 在主程序中,将各个命名空间的 内容输出。 运行结果如图2-7 所示。从运行结果可以看 出,每个命名空间的内容都被很好地调用了。 2.4.2 using 关键字 在 C++ 的命名空间中,为了使用时的方便,又引入了关键字 using。 利用 using 声明,可 以在引用命名空间成员时不必使用命名空间限定符“::”。 使用方法如下: using namespace std; 下面通过一个例子来说明如何使用using关键字。 【例2-7】using 关键字(代码2-7.txt)。 新建名为usingtest 的 C++ Source File 源程序。源代码如下: using namespace std; //using namespace 编译指示,使在C++ 标准类库中定义的名字在本程序中可以使用 //否则, iostream、string 等C++ 标准类就不可见了,编译就会出错 //两个在不同命名空间中定义的名字相同的变量 namespace myowna{ string user name="命名空间a"; namespace myownb{ string user name="命名空间b"; int main() using namespace myowna; //使用using 的方式调用命名空间 myowna cout<<"" <<"使用using 的方式调用," < <<"被成功调用了!"< //不使用using 的方式调用命名空间myownb cout<<"" <<"使用命名空间限制符的方式调用," < system("pause"); return 0; 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 [email protected] 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~