命名空間時間上就是一個由程序設計者命名的內存區域。程序設計者能夠根據須要指定一些有名字的空間域,把一些全局實體分別放在各個命名空間中,從而與其餘全局實體分割開來。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