广州C/C++培训
达内广州岗顶中心

18087159764

热门课程

为什么要用C++命名空间(名字空间)

  • 时间:2016-09-26
  • 发布:广州C++培训
  • 来源:C语言论坛

广州达内C++培训机构是一家真正在用心做培训的机构,很多初学者一些不太了解得问题,我们都会定期进行收集然后予以解答,今天广州达内C++培训机构要跟大家分享的是:为什么要用C++命名空间(名字空间)。

C++语言引入命名空间(Namespace)这一概念主要是为了避免命名冲突,其关键字为namespace。

科技发展到如今,一个系统通常都不会仅由一个人来开发完成,不同的人开发同一个系统,不可避免地会出现变量或函数的命名冲突,当所有人的代码测试通过,没有问题时,将所有人的代码结合到一起,因为变量或函数重名而导致的问题将会造成一定的混乱,例如:

 int  flag = 1;      //小李声明的变量
    // ……             //中间间隔若干行代码
    bool flag = true;   //小韩声明的变量

如上所示,因为个人习惯不同,小李喜欢声明 int 型变量用于逻辑判断,而小韩则更喜欢采用 bool 类型变量。但两个声明放到同一个函数中的时候,很明显编译器会提示出 flag 变量重新定义的错误。这种问题若不加以处理是无法编译通过的。

可以使用命名空间解决类似上面的命名冲突问题,例如:

 namespace Li{   //小李的变量声明
        int flag = 1;
    }
    namespace Han{   //小韩的变量声明
        bool flag = true;
    }

小李与小韩各自定义了以自己姓氏为名的命名空间,此时将小李与小韩的 flag 变量定义再置于同一个函数体中,则不会有任何问题,当然在使用这两个变量的时候需要指明所采用的是哪一个命名空间中的 flag 变量。

指定所使用的变量时需要用到“::”操作符,“::”操作符是域解析操作符。例如:

 Li::flag = 0;        //使用小李定义的变量flag
    Han::flag = false;   //使用小韩定义的变量flag

我们已经定义了两个命名空间 Li 和 Han,并在其中各自声明flag变量,使用的时候则需要分别用域解析操作符指明此时用的flag变量是谁定义出来的flag变量,是小韩还是小李定义的。

除了直接使用域解析操作符,还可以采用using声明,例如:

   using Li::flag;
    flag = 0;  //使用小李定义的变量flag
    Han::flag = false;  //使用小韩定义的变量flag

在代码的开头用using声明了Li::flag,其含义是using声明以后的程序中如果出现未指明的flag时,则使用Li::flag,但是若要使用小韩定义的flag,则仍需要Han::flag。

using声明不仅仅可以针对命名空间中的一个变量,也可以用于声明整个命名空间,例如:

using namespace Li;
    flag = 0;     //使用小李定义的变量flag
    Han::flag = false;   //使用小韩定义的变量flag

如果命名空间Li中还定义了其他的变量,则同样具有flag变量的效果,在using声明后,若出现未具体指定命名空间的命名冲突变量,则默认采用Li命名空间中的变量。

命名空间内部不仅可以声明或定义变量,对于其它能在命名空间以外声明或定义的实体,同样也都能在命名空间内部进行声明或定义,例如类的声明或定义、函数的声明或定义、typedef等都可以出现在命名空间中。

命名空间完整示例代码:

 #include <stdio.h>
    //将类定义在命名空间中
    namespace diy{
        class Student{
        public:
            char *name;
            int age;
            float score;
      
        public:
            void say(){
                printf("%s的年龄是 %d,成绩是 %f\n", name, age, score);
            }
        };
    }
    int main(){
        diy::Student stu1;
        stu1.name = "小明";
        stu1.age = 15;
        stu1.score = 92.5f;
        stu1.say();
        return 0;
    }

运行结果:

小明的年龄是 15,成绩是 92.500000

上一篇:广州达内带你了解从C到C++得历程
下一篇:想学C语言?你了解C语言的发展及其版本吗?

广州达内分享C++的另一种错误处理策略

广州达内带你了解C++14 lambda 教程

广州达内带你了解C++ 14 auto 教程

C++程序员看过来,false < false的设定恰当吗?

选择城市和中心
贵州省

广西省

海南省