1. 程式人生 > >在c++中怎麼建立名稱空間

在c++中怎麼建立名稱空間

什麼是名稱空間呢?舉一個現實中的例子,名稱空間就像是一個企業,每個企業都有自己的員工。在這裡假設每一個員工代表一個類,於是每一個名稱空間中都包含若干個類。優於名稱空間不同,編譯器就可以將同名的類區別開來。這就像企業A中有個叫“張三”,企業B也有個叫“張三”的。但是由於兩個企業不同,人們還是可以把兩個人區分開來。

使用名稱空間的方式有以下三種:

方法一:

#include"iostream"

namespace hehe
{
	using std::endl;
	using std::cout;
	void fun()
	{
		cout << "fun in hehe" << endl;
	}
}
int main()
{
	using namespace hehe;
	fun();
	return 0;
}

輸出結果如下:

fun in hehe

請按任意鍵繼續. . .

方法二:

#include"iostream"

namespace hehe
{
	using std::endl;
	using std::cout;
	void fun()
	{
		cout << "fun in hehe" << endl;
	}
	class X{
	public:
		static void fun()
		{
			cout << "fun in hehe::X" << endl;
		}
	};
}
int main()
{
	using namespace hehe;
	hehe::fun();
	hehe::X::fun();
	return 0;
}
輸出結果如下:

fun in hehe
fun in hehe::X
請按任意鍵繼續. . .

方法三:

#include"iostream"

namespace hehe
{
	using std::endl;
	using std::cout;
	void fun()
	{
		cout << "fun in hehe" << endl;
	}
}

namespace hoho
{
	using std::endl;
	using std::cout;
	void fun()
	{
		cout << "fun in hoho" << endl;
	}
}
int main()
{
	using namespace hehe;
	using hoho::fun;
	hehe::fun();
	fun();
	return 0;
} 
輸出結果如下:

fun in hehe
fun in hoho
請按任意鍵繼續. . .

對以上三種方法進行對比,可以得出一下結果:

①如方法一所示,使用using語句開啟名稱空間後,在後面的程式中,程式設計師不用再次輸入名稱空間的名字,但是使用using開啟名稱空間後,後面的名稱空間講預設為現有的名稱空間,這樣其他名稱空間中同名的函式便不能直接使用,除非使用作用域識別符號,負責會產生編譯錯誤。

②方法二中使用作用域識別符號開啟名稱空間的好處是,被開啟的名稱空間將不會對程式現有的名稱空間造成任何影響。但是程式設計師每次要輸入名稱空間的名字,當名稱空間名字很長時將會影響程式的可讀性。

③方法三中使用申明語句似乎是前面兩種方法的折中,既不需要輸入較長的名稱空間名,又不會對現有的名稱空間造成影響。但是也有致命的缺點,即程式設計師必須記住所設申明的名稱空間的名字,一旦忘記,後果不堪設想。

名稱空間的增補操作如下:

#include"iostream"

namespace hehe
{
	using std::endl;
	using std::cout;
	void fun1()
	{
		cout << "fun1 in hehe" << endl;
	}
}
namespace hehe{
	void fun2()
	{
		cout << "fun2 in hehe" << endl;

	}
}
int main()
{
	using namespace hehe;
	fun1();
	fun2();
	return 0;
}
輸出結果如下:

fun1 in hehe
fun2 in hehe
請按任意鍵繼續. . .

有的名稱空間名字比較長,也可以使用如下語句講名字空間的名字改變:

namespace h=hehe;