用户登录
用户注册

分享至

C++基础篇(三)--命名空间

  • 作者: YGR一个人
  • 来源: 51数据库
  • 2021-08-20

什么是命名空间

在刚开始学C++时,对命名空间甚是迷惑,但写得久了后就当成习惯了,并未探究其本质。

在C语言中并未引入using namespace的概念,C语言中所有的全局标识符共享一个作用域,不同文件可通过extern关键字进行关联。

而在C++中当使用iostream时,由于该头文件没有定义全局命名空间,所以必须使用namespace std,这样才能正确的使用一些变量,例如cout,如果不引入,则需要std::cout。

命名空间的定义:实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。

为何需要命名空间?

一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。
所以需要使用命名空间将变量进行分离,从而避免冲突的发生。
例如:

hao::qinger = 1;
jing:yi = 1;

则这两个变量分别来自于hao和jing这两个命名空间当中。
如果觉得这个例子不够直观,那么可以看下面这个例子:

SDAU::qinger = 1;
EDU::qinger = 1;

这两个qinger看似相同,但却来自于不同的命名空间,故其所指向的内存空间是不同的。

如何定义命名空间

命名空间的定义如下所示:

namespace name{
    //variables, functions, classes
}

在命名空间中可以包含变量、函数、类、typedef、#define 等。

如一个具体的例子:

namespace jing{
	string person = "qinger";
}

我们也可以在namespace中定义class:

namespace jing{
    class Person{
    public:
        char *name;
        float score;
  
    public:
        void say(){
           cout<<name<<的成绩是<<score<<endl;
        }
    };
}

在调用时只需:

int main(){
    jing::Person qinger;
    qinger.name = "卿儿";
    qinger.score = 100.0f;
    qinger.say();
    return 0;
}
软件
前端设计
程序设计
Java相关