c++ 命名空间

 命名空间:

概念:

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

1 namespace nsl 
2 {
3  const int RATE=0.08//常量 
4 double pay; //变量 
5 double tax() //函数 
6 {return a*RATE;} 
7 namespace ns2 //嵌套的命名空间 
8 {int age;} 
9 } 

 使用命名空间的方法:

可以使用作用域解析符号 : : 来使用命名空间下的变量,函数以及类等等(其实就是相当于比如年级一班和二班都有小鸣,开年级大会点名时,只有在小明的前面加上班级才能分清楚),但是每次都是这样会有些麻烦,所以我们可以用using声明和using编译指令来简化这一行为。using声明:using ns1::pay;进行声明过后我们可以直接使用pay变量了;using编译指令是指:using namespace ns1;告诉编译器这个名命空间的所有元素我都可以使用,这是一种非常偷懒的做法。定义在namespace中的元素必须通过以上的三种方式才能够使用!在一般情况下我们在头文件中声明,在源文件中定义。

由上可知命名空间可以嵌套使用,即在命名空间中可以定义命名空间也可以在命名空间使用using声明和using编译指令,这里要注意的是using编译指令是可以传递的,若A中用using编译指令使用B,如果有代码用using编译指令使用A,则与此同时B也用using编译指令过了。不仅如此头文件使用using编译指令使用B,则与此同时B也用using编译指令过了。命名空间是可以不连续的,也就是说可以在多个文件中完成对一个命名空间的补充。(一般情况下我们在头文件中定义命名空间的声明函数原型,类声明,在源文件中函数定义,类公共接口函数的具体内容,所以在我们使用std命名空间时我们首先先讲包含在头文件的namespace的声明写出来,然后再用using编译指令,在std命名空间中包含了所有的标准库的类,函数,标识符等)

头文件可以包含的内容:

c++将头文件引入的#include当用<>时编译器将会在储存标准头文件的文件系统找,而用“ ”时编译器首先查当前目录是否有头文件,一般情况下我们自己编写的头文件我们采用 #include “   ”,而且c++还定义同一个文件只能讲同一个头文件包含一次,为了防止同一个头文件被多次包含用 #ifdef   ?_H_  #define ?_H_  #endif(这些是预编译指令)

  • 函数原型:千万不能把函数定义放在其中,当有多个文件引入该头文件实就会有多个同名函数被定义而出错!
  • 使用#define或者const常量
  • 结构声明
  • 模板声明
  • 内联函数:内两函数可以多次定义
原文地址:https://www.cnblogs.com/yskn/p/8979465.html