【Linux C++ 系列 】04 C++ 命名空间

举报
jackwangcumt 发表于 2022/07/04 09:22:35 2022/07/04
【摘要】  C++相对于C语言来说,支持命名空间namespace语法。那为什么需要命名空间呢?原因非常简单,当前的程序非常复杂,是多人协作完成的,那么这就无法避免在同一个应用程序中,出现相同命令的变量,函数名和类名等情况,如果无法做到相互隔离,那么在合并编译时,则会出现各种冲突的问题。命名空间在C#语言中是类似的,而Java中的package也是类似的作用。

1 命名空间


     C++相对于C语言来说,支持命名空间namespace语法。那为什么需要命名空间呢?原因非常简单,当前的程序非常复杂,是多人协作完成的,那么这就无法避免在同一个应用程序中,出现相同命令的变量,函数名和类名等情况,如果无法做到相互隔离,那么在合并编译时,则会出现各种冲突的问题。命名空间在C#语言中是类似的,而Java中的package也是类似的作用。

2 命名空间定义


     C++命名空间用关键字namespace进行定义,namespace后面需要指定命名空间的名称,内部可以定义变量,函数,以及类等。当然,命名空间也可以嵌套,且在大括号 } 末尾无需用 ; 进行结尾,这个是和class不同的。C++命名空间定义的语法如下所示:

namespace ns_name 
{
   int x, y; 
   void method();
   class MyClass {} ;
}

     其中,命名空间不需要用限定词进行修饰,即Public 或 Private 。命名空间下的元素访问用 :: 符号进行操作,同样的命名空间,可以拆分成多个单元进行分别定义,命名空间访问操作如下所示:

ns_name: :var1;
ns_name: :func();
ns_name: :myclass;

3 命名空间示例


     下面给出C++命名空间的基本示例,具体如下所示 :

#include <iostream>
using namespace std;

namespace mycom{
    int a = 2 ;
    int sum(int a, int b){
        return a + b ;
    }
} 

namespace mycom{
    namespace subns{
        int a = 7 ;
    }
    class Car{
        public:
            void Drive(){
                cout << " Car Drive..." << endl ;
            } 

    };
} 


int main()
{
    mycom::Car car ;
    car.Drive();
    int c = mycom::sum(mycom::a , mycom::subns::a);
    cout << " mycom::sum(mycom::a , mycom::subns::a) -> " << c << endl ;
    
    return 0;
}

执行如下代码进行编译和执行:

g++ demo04.cpp -o demo04
./demo04

   输出结果如下所示:

03.jpg

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。