命名空间
1.命名空间来历(缘起)
命名空间的由来在百度百科中是这样说的,我觉得颇有道理,也容易令人理解:
命名空间是用来组织和重用代码的 。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了。为了解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的命名冲突问题。
这样我们就可以解决类似于“两个叫相同名字的人怎么区别”的问题,我们可以通过他们来自于哪个地方(即命名空间)来得到答案。比如,北京的张三,上海的张三,我们可以通过地域来区分这两个人。
2.命名空间定义
我们先入例子:
例1.1.1
#include <iostream>
using namespace std;
int main()
{
cout<<"hello World!"<<endl;
return 0;
}
using namespace std;
这句话就是用来声明使用命名空间的。
当一个C++项目分给多个人做时,难免有时候大家会命名相同的变量,
比如张三在项目里命名了float
类型的变量price,而李四命名了int类型的price,而在接下来的
项目中,如果不使用命名空间,你将无法确定price属于哪一个人命名的变量。所谓命名空间,就是
在系统分配给你的一个空间类定义属于你自己的变量名,当你要使用该空间的变量或者函数时,你
声明一下就可以了。
命名空间定义:
namespace 命名空间名{
//命名空间的变量
//.............
//命名空间的函数
//.............
}//(此处无分号)
例1.1.2
namespace hui{
//命名空间的变量
char sex;
int age;
//命名空间的函数
void work();
void out_age()
{
printf("hui::age=%d\n",age);
}
}
3.命名空间的声明方式:
方式一:(使用命名空间中的单一元素<变量/函数>)
using 命名空间名::元素名;
ep:using hui::age;
方式二:(使用命名空间中的所有元素)
using namespace 命名空间名;
ep: using namespace hui;
4.综合的例子:
//==================================================
//程序描述:C++中的命名空间(防止命名冲突)
//Date:2016年1月8日 by Ye_wolf
//备注:
//==================================================
//========================【头文件部分】=============================
#include <iostream>
#include <stdio.h>
using namespace std;//使用标准命名空间,如果接下来的的代码没有指定命名空间,皆默认为std命名空间
//========================【命名空间】==============================
//-----------------------------hui命名空间------------------------------
namespace hui{
//命名空间的变量
int age;
//命名空间的函数
void out_age()
{
printf("hui::age=%d\n",age);
}
}
//-----------------------------yu命名空间------------------------------
namespace yu{
//命名空间的变量
int age;
//命名空间的函数
void out_age()
{
printf("yu::age=%d\n",age);
}
}
//=========================【主函数】============================
int main()
{
{
using namespace hui;
age=21;//该变量存在于hui命名空间
out_age();
}
{
using namespace yu;
age=20;//该变量存在于age命名空间
out_age();
}
cout<<"niqi"<<endl;//cout存在标准命名空间std中
return 0;
}
运行截图: