C++基础篇(三)--命名空间
程序员文章站
2022-03-11 16:37:07
什么是命名空间在刚开始学C++时,对命名空间甚是迷惑,但写得久了后就当成习惯了,并未探究其本质。命名空间的定义:实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。为何需要命名空间?一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。所以需要使用命名空间将变量进行分离,从...
什么是命名空间
在刚开始学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;
}
本文地址:https://blog.csdn.net/bigMonkey521/article/details/107365979