Skip to Content
C++程序设计:原理与实践(基础篇)(原书第2版)
book

C++程序设计:原理与实践(基础篇)(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
Pearson
Content preview from C++程序设计:原理与实践(基础篇)(原书第2版)

8.7 名字空间

在函数中我们用程序块来组织代码(8.4节)。我们用类来将函数、数据和类型组织到一个类型中(第9章)。函数和类都为我们做了如下工作:

·允许我们定义大量实体,而无须担心它们的名字与程序中其他实体的名字冲突。

·为我们提供了一个名字,用来访问我们定义的东西。

至此,我们还缺少一种技术,即无须定义一个类型就能将类、函数、数据和类型组织成一个可识别的命名实体。实现这种声明分组功能的C++机制就是名字空间(namespace)。例如,我们希望提供一个包含类Color、Shape、Line、Function和Text的绘图库(参见第18章):

很可能其他人也使用了这些名字,但没有关系。你可以定义名为Text的实体,但与我们的Text没有冲突。Graph_lib::Text是我们定义的类,而你的Text与之不同。唯一可能有问题的情况就是,你也定义了一个名为Graph_lib的类或者名字空间,它也包含一个名为Text的成员。Graph_lib这个名字有点丑,我们选择它的原因是,“漂亮且清晰”的名字Graphics有很大可能已经被别人用过了。

假设你的Text是一个文字处理库的一部分。我们用来将绘图功能组织到名字空间Graph_lib中的思想,也可用来将你的文字处理功能组织到一个叫其他名字(比如TextLib)的名字空间:

如果定义的这两个名字空间都是全局的,我们可能会陷入真正的麻烦之中。假使有人同时使用这两个库,就可能真的遇到名字冲突,如Text和Line。糟糕的是,如果这两个库都有用户在使用,我们就无法通过修改Line、Text这些名字来避免冲突,否则用户程序也必须修改。为了解决这一问题,我们可以使用名字空间,即我们的Text用Graph_lib::Text表示,你的Text用TextLib::Text。这种由一个名字空间的名字(或一个类名)和一个成员名组合成的名字称为全限定名(fully ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉

Publisher Resources

ISBN: 9787111562252