namespace(上)

名稱空間筆記(上)
Namespace 剖析------jiese1990

         namespace,我有見過兩種翻譯“名稱空間”和“命名空間”!這裏我們姑且用“名稱空間”;

        依稀記得c++的第一課講的就是namespace的使用!c++學了兩年了,一直以來,都在用別人定義好的namespace,很少定義過自己的namespace!於是昨天花了些時間,看了看namespace的知識點!記下了這篇筆記!如果你能很輕鬆愉快的把筆記後的練習完成,那麼,建議不要浪費時間,看這篇筆記(下面的東西都是基礎的東西)!

 

定義名稱空間
方法一:申明和定義放在一起

namespace jiese
{
	int j;
	void PrintText(char *text)
	{
	printf(text);
	}
}


該方法只適合,用在cpp文件裏;
在頭文件裏就適合這樣定義名稱空間,因爲我們在名稱空間裏不僅僅是申明瞭變量j,還定義了變量j,而且定義了函數!若放在頭文件裏,當多次包含該頭文件時(在多個cpp文件裏#include “ “),會報“重定義;多次初始化“錯!
這點與我們不在h文件中不放類的定義,只放申明,還有函數也不在頭文件定義,是一個道理!(其深層原理就不再解釋,如果這點還不清楚的話,那麼就需要惡補下c++了)
方法二:名稱空間裏的數據結構,的聲明和定義完全分開!
申明:
namespace jiese
{
	extern int j;
	void PrintText( char * text);
	class CTextClass
	{
		public:
		int m_no;
		CTextClass();
	};
}



定義:

定義1

namespace jiese
{
	int j=0;
	void PrintText( char * text)
	{
		printf(text);
	}
	CTextClass::CTextClass()
	{
		this->m_no=-1;
	}
}



也可以如下定義,與上面等價
(如果,名稱空間申明是在一個頭文件裏,要將該頭文件#include)

定義2

using namespace jiese;
CTextClass::CTextClass()
{
	this->m_no=-1;
}
void jiese::PrintText(char * text)
{
	printf(text);
	printf("wai");
}//變量的定義不能像函數那樣定義!必須如下
namespace jiese
{
	int j=0;
}

名稱空間是開放的,可以隨時在名稱空間裏添加名稱!
但,在同一個名稱空間裏不能有同名的名稱!
如:
情況一:在A.h文件裏
namespace A
{
	int j=0;
}



在B.cpp裏

namespace A
{
	int j=0;
}



“情況一”下,會報“重定義;多次初始化“錯!同理於我們在不同文件裏定義同名的全局變量,報錯!

名稱空間,我的理解是,在沒有名稱空間機制之前,我們只有一個名稱空間就是一個默認的名稱空間!我們的數據的聲明定義,都是在同一個默認的名稱空間裏!當有了名稱空間機制之後我們不僅僅有一個默認的名稱空間,還可以定義自己的名稱空間!在不同的名稱空間裏的名稱(數據名稱,和函數名稱等)互不干擾!

練習:
OK,有了上面的基礎,那麼下面程序輸出的結果是什麼?

//程序
namespace jiese1
{
	int j=1;
}

char j='A';
int _tmain(int argc, _TCHAR* argv[])
{
	using namespace std;
	cout<<j<<endl;

	double j=-1.009;
	using namespace jiese1;
	cout<<jiese1::j<<endl;
	cout<<j<<endl;

	{
		using namespace jiese1;
		float j=250;
		cout<<j;
	}
return 0;
}



你知道答案嗎????下篇爲您揭曉答案!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章