名称空间

1. 概念

  • 生活中的名字冲突
  • 程序可能会调用多个库,不同的库里面可能存在相同的全局变量名,全局函数名,类名等等。
  • 库供应商为了避免与其他供应商或者用户自定义的名字相冲突,常常将库中的所有名字放置在自己的名字空间中

2. 定义语法

  1. namespace spaneName{
  2. // 声明或者定义的相关内容
  3. }
  • .h和.cpp文件中都要使用

3. 用法

  • 使用名字空间中名字(变量名、函数名…etc)时必须要指明名字空间。
  • 一般用法

    1. spceName::name //每次使用某个用名字时都带上名字空间<br /> 例如: std::cout
  • 使用using编译指令

    1. using namespace spaceName; //指定使用一个名字空间,使用该名字空间下的所有名字时都省略名字空间前缀<br /> 例如: using namespace std; //std是C++标准库的名字空间

4. 无名名字空间

  • 如果定义某个名字时没有放入某个命名空间下,则默认放在无名空间下
  • 使用无名名字空间下的名字:

    • 不存在名字冲突时:

      名字

    • 存在名字冲突时:

      ::名字

      5. 示例代码

      1. #ifndef __GIRL_H__
      2. #define __GIRL_H__
      3. namespace girl{
      4. void teaching();
      5. void singSong();
      6. void dancing();
      7. }
      8. #endif

      ```cpp

      include “girl.h”

      include

      using namespace std;

namespace girl{ void teaching(){ cout << “女孩,教数学很厉害” << endl; } void singSong(){ cout << “女孩,唱歌很好听” << endl; } void dancing(){ cout << “女孩,跳舞很得劲” << endl; } }

  1. ```cpp
  2. #include "girl.h"
  3. #include <iostream>
  4. using namespace std;
  5. using namespace girl;
  6. void teaching(){
  7. cout << "男孩,教物理很厉害" << endl;
  8. }
  9. int main(int argc, char** argv){
  10. ::teaching(); // 访问男孩的方法
  11. girl::teaching(); // 访问女孩的方法
  12. singSong(); // 访问女孩的方法
  13. dancing(); // 访问女孩的方法
  14. return 0;
  15. }