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

本文探讨了C++中的命名空间概念,解释了为何在C++中需要命名空间以避免命名冲突,以及如何定义和使用命名空间。通过实例展示了命名空间如何帮助组织代码并隔离全局标识符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是命名空间

在刚开始学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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值