命名空间Namespace:(也可以成为名称空间,名字空间)
当开发大型软件时由多名程序员共同开发,会使用大量的变量和函数,不可避免的会出现变量或者命名冲突,为了解决合作开发时的命名冲突问题
例子:小红和小明都参与了一个文件管理系统的开发,它们都定义了一个全局变量fp,用来指明当前打开的文件,将它们的代码整合在一起编译时,很明显编译器会提示fp重复定义错误,这时候就需要命名空间了
namespace Ming{ //小明的变量定义
FILE fp=NULL;
}
namespace Hong{ //小红的变量定义
FILE fp=NULL;
}
小明和小红各自定义了以自己姓氏为名的命名空间,此时就不会出现问题
namespace name{
//variables,functions,classes
}
name是命名空间的名字,她里面可以包含变量,函数,雷,等,最后由{} 包围
使用变量、函数时要指明它们所在的命名空间,例:
using Ming::fp;
fp=fopen("one.txt,"r"); //使用小明定义的变量fp
Hong::fp=fopen("two.txt,"rb+");//使用小红定义的变量fp
在代码的开头用using声明Ming::fp,它的意思是,using声明以后的程序中如果出现了未指明命名空间的fp,就使用Ming::fp;但是若要使用小红定义的fp,仍需要Hong::fp
using 声明不仅可以针对命名空间中的一个变量,也可以用于声明整个命名空间,例如:
using namespace Ming;
fp=fopen("one.txt,"r"); //使用小明定义的变量fp
Hong::fp=fopen("two.txt,"rb+");//使用小红定义的变量fp
如果命名空间Ming中还定义了其他的变量,那么同样具有fp变量的效果,在using声明后,如果有未具体指定命名空间的变量产生了命名冲突,那么默认采用命名空间Ming中的变量。
命名空间内部不仅可以声明或定义变量,对于其他能在命名空间以外声明或定义的名称,同样也都能在命名空间内部进行声明或定义。