ad

《C++程序开发案例课堂》_了解C++的更好途径_2.4 命名空间

admin 69 2023-11-01

【摘要】 本书摘自《C++程序开发案例课堂》一书中第2章,第4节,由刘春茂、李琪编著。

2.4 命名空间

在书写程序的时候,很多时候都要用到 namespace, 那么这个namespace 是什么呢?

2.4.1 命名空间的定义

命名空间(namespace)是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同一 个集团的声明放在同一个命名空间中。

在 C++ 中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类、对象等。 在大规模程序的设计中,以及在程序员使用各种各样的 C++ 库时,为了避免这些标识符的命 名发生冲突,标准 C++ 引入了关键字 namespace(命名空间/名字空间/名称空间/名域),可以更 好地控制标识符的作用域。

《C++程序开发案例课堂》_了解C++的更好途径_2.4 命名空间

原来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 源程序。源代码如下:

Hinclude#include

using 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 源程序。源代码如下:

#include#include

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小时内删除侵权内容。

上一篇:《C++程序开发案例课堂》_了解C++的更好途径_2.5 实战演练—— 经典的入门程序
下一篇:《C++程序开发案例课堂》_了解C++的更好途径_1.6 实战演练——第一个C++ 项目
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×