命名空间和模块化编程3
命名空間:
地球人都知道,創(chuàng)建的每一個(gè)類(lèi)、函數(shù)和變量都只能在一定的區(qū)域內(nèi)使用。而我們所知道最大的區(qū)域是全局作用域,最小的區(qū)域是一個(gè)代碼塊,例如:
{int a = 20; } //a在此處已經(jīng)不存在 隨著程序變得越來(lái)越復(fù)雜,全局作用城里的東西會(huì)越來(lái)越多,尤其是在使用外部函數(shù)庫(kù)時(shí)。
這可能會(huì)演變成一個(gè)問(wèn)題:因?yàn)闆](méi)有兩樣?xùn)|西可以有同樣的名字。
解決方案之一是給每個(gè)變量、函數(shù)和類(lèi)等取一個(gè)獨(dú)一無(wú)二的名字,但這可能很困難或很麻煩(因?yàn)殡S著一個(gè)程序代碼量的逐步增加,一個(gè)變量名可能會(huì)變成像"CountOfItemsInTheArray"醬紫才能不重復(fù))。
這時(shí)候正是“命名空間”(namespace)的用武之地!
命名空間其實(shí)就是由用戶定義的范圍,同一個(gè)命名空間里的東西只要在這個(gè)命名空間有獨(dú)一無(wú)二的名字就行了。
因此,如果某個(gè)程序有許多不同的頭文件或已編譯文件,它們又各自聲明了許多的東西,命名空間可以為它們提供保護(hù)。
創(chuàng)建命名空間的辦法很簡(jiǎn)單,先寫(xiě)出關(guān)鍵字namespace,再寫(xiě)出這個(gè)命名空間的名字,然后把這個(gè)命名空間里的東西全部括在一對(duì)花括號(hào)里就行了,如下所示:
namespace myNamespace {//全部東西 }?
注意在最末尾不需要加上分號(hào)哦。
正如我們剛才講過(guò)的那樣,命名空間可以讓你隨用同一個(gè)標(biāo)識(shí)等而不會(huì)導(dǎo)致沖突:
namespace author {std:string person; }namespace programmer {std:string person; }代碼示例:http://www.runoob.com/cplusplus/cpp-namespaces.html
?
使用命名空間:
如果某個(gè)東西是在命名空間里定義的,程序?qū)⒉荒芰⒖淌褂盟?/span>
這正是命名空間的全部意義所在:把東西放在它們自己的小盒子里,不讓它們與可能有著相同名字的其他東西發(fā)生沖突。
想要訪問(wèn)在某個(gè)命名空間里定義的東西,有三種方法可供選擇。
第二種方法是使用using指令:
using namespace std;執(zhí)行這條語(yǔ)句后,在std命名空間里定義的所有東西就都可以使用,我們便可以像下面直接使用:
cout<<"I love fishc.com"不過(guò),把命名空間里的東西帶到全局作用域里,跟我們使用命名空間的本意相違背!所以不建議使用這種設(shè)計(jì)風(fēng)格。
最后一種方法是用一個(gè)using指令只把你需要的特定命名從命名空間提取到全局作用域:
using std::cout; cout<<"I love fishc. com!\n";最后請(qǐng)務(wù)必注意:using指令的出現(xiàn)位置決定著從命名空間里提取出來(lái)的東西能在哪個(gè)作用域內(nèi)使用。如果你把它放在所有函數(shù)聲明的前面,他將擁有全局性,如果你把它放在某個(gè)函數(shù)里,那么它將只在這個(gè)函數(shù)里可以使用?! ?/span>
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/tianqizhi/p/10497501.html
總結(jié)
以上是生活随笔為你收集整理的命名空间和模块化编程3的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 你确定你真的理解“双亲委派“了吗?!
- 下一篇: 设置Django关闭Debug后的静态文