使用命名空間解決名字衝突

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

header2.h

#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);
	}
}

main.cpp

#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
*/

分析:分別在header1.h和header2.h中創建了兩個命名空間ns1和ns2,將原來在兩個頭文件中聲明的類分別放在命名空間ns1個ns2中。注意:在頭文件中,不要把#include命令放在命名空間中,由於命名空間中的內容不包括命令行,不然編譯會出錯。

兩個Student和fun分別放在不一樣的命名空間中,各自有其做用域,互不相干。因爲做用域不相同,不會產生名字衝突。正如同在兩個不一樣的類中能夠有同名的變量和函數而不會產生衝突同樣。在使用時,咱們只須要在用ns1::Student(命名空間ns1中的Student)來定義stud1,用ns2::Student(命名空間ns2中的Student)來定義stud2。顯然,ns1::Student和ns2::Student是兩個不一樣的類,不會發生衝突。code

相關文章
相關標籤/搜索