命名空间:
为什么在C++中会有命名空间呢?
在大型的项目中,命名函数和变量起名是一件需要考虑很多,一般都是不同的需求加上特定的前缀,但有时还是避免不了出现同名的情况。因为C语言中有一些缺陷,在不同的环境下,出现同名的变量或函数。为了解决这类问题,C++中就提出了命名空间。
目的是将不同模块的标识符放到不同的命名空间中,来避免命名的冲突。一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。
同一块命名空间中的所有数据都是共有的,即在一个命名空间时不能出现同名的问题。
-
怎样定义命名空间?
1.命名空间中可以定义变量,也可以定义函数。
但是,最好不要在命名空间中定义函数,因为在代码出错要维护代码时,效率会比较低,所以建议使用函数指针这种方式。
namespace N1
{
int a;
int b;
int(*Add)(int, int);
}
int Add(int tmp1,int tmp2)
{
return tmp1 + tmp2;
}
2.命名空间的嵌套。
namespace N1
{
int a;
int b;
int Add(int tmp1, int tmp2)
{
return tmp1 + tmp2;
}
namespace N2
{
int Sub(int tmp1, int tmp2)
{
return tmp1 - tmp2;
}
}
}
-
如何使用命名空间中的成员?
1.作用域限定符 ( : : )
int main()
{
cout<<N1::a;
system("pause");
return 0;
}
2.使用using
using是C++中的一个关键字,它有自己的作用域,所以using不能出现在定义作用域之前。
若在两个不同的命名空间中,有同名的变量或函数时,对其操作时,不能重叠使用命名空间,不然就会不清晰要使用哪个命名空间中的成员。加上作用域限定符就可以很好地解决这个问题。
using N1::a;
int main()
{
cout<<a;
system("pause");
return 0;
}
3.使用using namespace
using namespace N1;
int main()
{
int tmp = Add(1, 2);
cout<<tmp;
system("pause");
return 0;
}