9.3.3 名称空间示例(1)
现在来看一个多文件示例,该示例说明了名称空间的一些特性。该程序的第一个文件(参见程序清单9.11)是头文件,其中包含头文件中常包含的内容:常量、结构定义和函数原型。在这个例子中,这些内容被放在两个名称空间中。第一个名称空间叫做pers,其中包含Person结构的定义和两个函数的原型--一个函数用人名填充结构,另一个函数显示结构的内容;第二个名称空间叫做debts,它定义了一个结构,该结构用来存储人名和金额。该结构使用了Person结构,因此,debts名称空间使用一条using编译指令,让pers中的名称在debts名称空间可用。debts名称空间也包含一些原型。
程序清单9.11 namesp.h
第二个文件(见程序清单9.12)是源代码文件,它提供了头文件中的函数原型对应的定义。在名称空间中声明的函数名的作用域为整个名称空间,因此定义和声明必须位于同一个名称空间中。这正是名称空间的开放性发挥作用的地方。通过包含namesp.h(参见程序清单9.11)导入了原来的名称空间。然后该文件将函数定义添加入到两个名称空间中,如程序清单9.12所示。另外,文件names.cpp演示了如何使用using声明和作用域解析运算符来使名称空间std中的元素可用。
程序清单9.12 namesp.cpp
最后,该程序的第三个文件(参见程序清单9.13)是一个源代码文件,它使用了名称空间中声明和定义的结构和函数。程序清单9.13演示了多种使名称空间标识符可用的方法。