C/C++学习之命名空间
上节我们介绍了打印方法与字符串常量。C/C++之字符串常量与打印语句
本节我们来介绍命名空间。
-
为什么要使用命名空间:避免名字冲突。
-
假设一个项目由多个人开发,自己先写了一部分,想要描述一下中国的人口和首都,之后另外一个人也参与进这个项目,想描述一下日本的人口和首都。
该处是由自己写的一部分,观察一下代码中的细节,稍后做分析:
#include <iostream> #include <string> //人口 float population = 14.1; // 单位:亿 std::string capital = "北京"; int main() { std::cout << "首都:" << capital << std::endl; std::cout << "人口:" << population << std::endl; }
#include < string>是字符串相关的头文件。
上面是很简单的,float代表浮点型(小数)变量, string代表字符串变量。
此时表示出结果很容易,并且显而易见。
-
那么问题就来了,此时另外一个人如果也定义变量population和capital那会不就混淆了吗,编译器可不知道该用哪个。
这个 时候命名空间的好处就来了。声明命名空间用namespace 名字 即可。#include <iostream> #include <string> namespace China { //人口 float population = 14.1; // 单位:亿 std::string capital = "北京"; } namespace Japan { float population = 1.27;// 单位:亿 std::string capital = "东京"; } using namespace Japan; int main() { std::cout << "首都:" << capital << std::endl; std::cout << "人口:" << population << std::endl; std::cout << "首都:" << China::capital << std::endl; std::cout << "人口:" << China::population << std::endl; }
上面定义了两个命名空间China和Japan,和std使用方法一样。
main函数上面使用using namespace Japan表示调用Japan中的变量时不需要加Japan::
打印出的结果是Japan和China的信息 -
注意:不能加上using namespace China; 两个都不用命名空间,也不能编译。写成这样是可以的:
using namespace Japan; using namespace China; int main() { //错误的版本。 /*std::cout << "首都:" << capital << std::endl; std::cout << "人口:" << population << std::endl;*/ std::cout << "首都:" << Japan::capital << std::endl; std::cout << "人口:" << Japan::population << std::endl; std::cout << "首都:" << China::capital << std::endl; std::cout << "人口:" << China::population << std::endl; }
-
补充:也可以指定命名空间的某一个变量,使其调用前不用加命名空间。
例如:using China::population; 只有China中的population可以不用加China,而调用capital时,也需要加上China。
下一节我们介绍自己写的代码(.cpp)变成可执行文件(.exe)的过程。