C++学习之详解命名空间

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.h

namespace Geometry
{
    class Point
    {
        //...
    };

    void drawLine()
    {
        //...
        printf("drawLine");
    }

    //...
}

然后,我们可以在另一个文件中扩展该命名空间,添加更多的函数和类:

// Shapes.h

namespace 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;
}

猜你喜欢

转载自blog.csdn.net/m0_59054762/article/details/131314262
今日推荐