命名空间时间上就是一个由程序设计者命名的内存区域。程序设计者能够根据须要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其余全局实体分割开来。ios
在程序设计中,不免会有一个页面包含多个其余页面的状况。当包含不一样的页面是,不一样的页面就有可能出现同名的类或者变量等,但显然他们在不一样的页面中的做用是不一样的,当包含到同一个页面的时候,就会出现重复定义的错误。这种状况能够使用命名空间来结果:函数
demo:spa
header1.h命令行
#include<cstring> #include<cmath> using namespace std; namespace ns1 //声明命名空间1 { class 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() //在类外定义函数体 { cout<<num<<" "<<name<<" "<<age<<endl; } double fun(double a,double b) { return sqrt(a+b); } }
#include<cstring> #include<cmath> using namespace std; namespace ns2 { class Student { public: Student(int n,string nam,string s) { num=n; name=nam; sex=s; } void get_data(); private: int num; string name; string sex; }; void Student::get_data() { cout<<num<<" "<<name<<" "<<sex<<endl; } double fun(double a,double b) { return sqrt(a-b); } }
#include<iostream> #include"header1.h" #include"header2.h" using namespace std; int main() { ns1::Student stud1(101,"Wang",18); stud1.get_data(); cout<<ns1::fun(3,5)<<endl; cout<<"\n=====================孤单寂寞冷的分割线飞过=============================="<<endl; ns2::Student stud2(102,"li","f"); stud2.get_data(); cout<<ns2::fun(5,3)<<endl; return 0; }
输出结果:设计
/* 101 Wang 18 2.82843 =====================孤单寂寞冷的分割线飞过=========================== 102 li f 1.41421 */
两个Student和fun分别放在不一样的命名空间中,各自有其做用域,互不相干。因为做用域不相同,不会产生名字冲突。正如同在两个不一样的类中能够有同名的变量和函数而不会产生冲突同样。在使用时,咱们只须要在用ns1::Student(命名空间ns1中的Student)来定义stud1,用ns2::Student(命名空间ns2中的Student)来定义stud2。显然,ns1::Student和ns2::Student是两个不一样的类,不会发生冲突。code