题记:命名空间下 不知道是不是还可以自己定义一些子空间,在代码里看到这样的写法,甚是疑惑。
一、什么是命名空间
通俗意义上说,每个命名空间都有自己的作用域,作用域的函数名,类名等是不可以重复的,唯一的。但是可以和其他命名空间的函数重名。这样就可以解决大型工程中函数名重复的问题。
1、全局变量的作用域是整个程序,在同一作用域中不应有两个或多个同名的实体(enuty),包括变量、函数和类等。
可以通过extern声明同一程序中的两个文件中的同名变量是同一个变量。如果在文件B中有以下声明:
extem int a;
表示文件B中的变量a是在其他文件中已定义的变量。由于有此声明,在程序编译和连接后,文件A的变量a的作用域扩展到了文件B。如果在文件B中不再对a赋值,则在文件B中用以下语句输出的是文件A中变量a的值: cout<
2.编写命名空间
namespace namespace_name
{
//declarations
}
此种方式,如果已经存在一个namespace_name命名空间,则是打开已有的命名空间,添加一部分进去;如果原来没有此名称的命名空间,则是创建一个新的。
3.命名空间可以是不连续的
与其他作用域不同,命名空间可以在几个部分中定义。命名空间由它的分离定义部分的总和构成,命名空间是累积的。一个命名空间的分离部分可以分散在多个文件 中,在不同文本文件中的命名空间定义也是累积的。就像上面说的那样,一个存在的命名空间去在里面不停的累加一些东西。
4.接口和实现的分离
命名空间定义可以不连续意味着,可以用分离的接口文件和实现文件构成命名空间,因此,可以用于管理自己的类和函数定义相同的方法来组织命名空间:
命名空间定义可以不连续意味着,可以用分离的接口文件和实现文件构成命名空间,因此,可以用于管理自己的类和函数定义相同的方法来组织命名空间:
(1)定义类的命名空间成员,以及作为类接口的一部分的函数声明与对象声明,可以放在头文件中,使用命名空间成员的文件可以包含这些头文件。
(2)命名空间成员的定义可以放在单独的源文件中。