C++命名空间(namespace)

0 namespace方法

1、命名空间下,可以放函数、模板、变量体等;

2、命名空间必须定义在全局作用域下;

3、命名空间可以嵌套命名空间;

4、命名空间是开放的,可以随时往命名空间里面添加新内容;

5、无名、匿名命名空间;
当写无名命名空间,相当于写了static,只能在当前文件里使用

6、命名空间可以取别名;


以下引用自:https://blog.csdn.net/qq_31798135/article/details/89035126

一、 命名空间是什么?

命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。
在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。

二、 命名空间如何定义?

命名空间:实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。
在声明一个命名空间时,花括号内不仅可以包括变量,而且还可以包括以下类型:
·变量(可以带有初始化);
·常量;
·数(可以是定义或声明);
·结构体;
·类;
·模板;
·命名空间(在一个命名空间中又定义一个命名空间,即嵌套的命名空间)。

namespace nsl 
{ const int RATE=0.08//常量 
doublepay; //变量 
doubletax() //函数 
{return a*RATE;} 
namespacens2 //嵌套的命名空间 
{int age;} 
} 

三、 使用命名空间解决名字冲突

有了以上的基础后,就可以利用命名空间来解决名字冲突问题。现在,对例4程序进行修改,使之能正确运行。

例5 利用命名空间来解决例4程序名字冲突问题。

修改两个头文件,把在头文件中声明的类分别放在两个不同的命名空间中。

//例8.5中的头文件1,文件名为header1.h 
using namespace std; 
#include 
#include 
namespace ns1 //声明命名空间ns1 
{ class Student //在命名空间nsl内声明Student类 
{ public: 
Student(int n,string nam,int a) 
{ num=n;name=nam;age=a;} 
void get_data(); 
private: 
int num; 
string name; 
int age; }; 
void Student::get_data() //定义成员函

四、 使用命名空间成员的方法

从上面的介绍可以知道,在引用命名空间成员时,要用命名空间名和作用域分辨符对命名空间成员进行限定,以区别不同的命名空间中的同名标识符。
即: 命名空间名::命名空间成员名
这种方法是有效的,能保证所引用的实体有惟一的名字。但是如果命名空间名字比较长,尤其在有命名空间嵌套的情况下,为引用一个实体,需要写很长的名字。在一个程序中可能要多次引用命名空间成员,就会感到很不方便。


发布了99 篇原创文章 · 获赞 229 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_32642107/article/details/104595986
今日推荐