1.理解命名空间
namespace命名空间正如翻译的那样给命名划分空间,每个函数名或变量等都有自己的使用范围,避免的使用函数名冲突的问题;
打个比方,一个班如果有两人叫做张三,那么其中如何区分这两个人那么就得给他们起别名了,比如胖张三和瘦张三。
代码中也是同理
2.使用命名空间
namespace(关键字) (自定义名字){// 代码声明
}
//调用命名空间
(自定义名字)::(变量或者函数);
#include <stdio.h>
namespace std
{void cout(){printf("cout");}}int main()
{std::cout();return 0;
}
有人可能觉得每次调用划范围的函数都要带上空间名太繁琐了
可以使用 using关键字来省去空间名
#include <stdio.h>
namespace std
{void cout(){printf("cout");}}
using std::cout;
int main()
{cout();return 0;
}
3.不连续命名空间
假设我们正在开发一个图形处理库,其中包含了各种图形相关的函数和类。我们可以使用命名空间将这些功能进行组织和分类。
首先,在一个文件中定义一个命名空间 Geometry
,用于包含图形相关的函数和类:
// Geometry.hnamespace Geometry
{class Point{//...};void drawLine(){//...printf("drawLine");}//...
}
然后,我们可以在另一个文件中扩展该命名空间,添加更多的函数和类:
// Shapes.hnamespace Geometry
{class Circle{//...};void drawRectangle(){//...printf("drawRectangle");}//...
}
通过使用不连续的命名空间,我们可以将功能按逻辑进行划分,比如 Geometry
.h命名空间负责基本几何图形的操作,Shapes.h
命名空间负责特定形状的绘制等。
在使用时,我们可以根据需要选择性地包含所需的命名空间,并使用其提供的功能。
// main.cpp
#include <stdio.h>
#include "Geometry.h"
#include "Shapes.h"int main() {Geometry::drawLine();Geometry::drawRectangle();return 0;
}
通过这样的设计,我们可以更好地组织和管理代码,避免命名冲突,并且在需要扩展功能时,只需添加相应的文件并扩展命名空间即可。
4.嵌套命名空间
顾名思义可以像函数一样嵌套调用
命名空间可以嵌套,您可以在一个命名空间中定义另一个命名空间,如下所示:
namespace namespace_name1 {// 代码声明namespace namespace_name2 {// 代码声明}
}
可以通过使用 :: 运算符来访问嵌套的命名空间中的成员:// 访问 namespace_name2 中的成员
using namespace namespace_name1::namespace_name2;// 访问 namespace_name1 中的成员
using namespace namespace_name1;
举个例子:
#include <stdio.h>
namespace std
{void cout(){printf("cout");}namespace std1{void cout(){printf("cout1");}}}
using std::std1::cout;
int main()
{cout();return 0;
}