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;
}
你知道答案嗎????下篇爲您揭曉答案!