類的static,const,static const , const static成員的初始化_第1頁
類的static,const,static const , const static成員的初始化_第2頁
類的static,const,static const , const static成員的初始化_第3頁
類的static,const,static const , const static成員的初始化_第4頁
類的static,const,static const , const static成員的初始化_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、類的 static,const,static const , const static成員的初始化1. 類里的 const 成員初始化:在一個(gè)類里建立一個(gè) const 時(shí),不能給它初值。像class fooprivate :const int i = 100;public:foo(.;這樣的初始化方式是不能通過編譯的, 因?yàn)樵陬悓?duì)象里進(jìn)行了存儲(chǔ)空間分配, 編譯器不能知 道 const 的內(nèi)容是什么,所以不能把它用作編譯期間的常量。這意味著對(duì)于類里的常數(shù)表達(dá) 式來說, const 就像它在 C 中一樣沒有作用。因此這個(gè)初始化工作必須發(fā)生在構(gòu)造函數(shù)里, 并且,要在構(gòu)造函數(shù)的某個(gè)特別的地方。因?yàn)?c

2、onst 必須在建立它的地方被初始化,所以在 構(gòu)造函數(shù)的主體里, const 必須已初始化了,否則,就只有等待,直到在構(gòu)造函數(shù)主體以后 的某個(gè)地方給它初始化,這意味著過一會(huì)兒才給 const 初始化。當(dāng)然,無法防止在在構(gòu)造函 數(shù)主體的不同地方改變 const 的值。構(gòu)造函數(shù)初始化表達(dá)式class fooprivate :const int i = 100;public:foo(.;如果構(gòu)造函數(shù)是在類外定義,則可以這樣寫:class fooprivate :const int i;public:foo(;.;foo:foo(: i(100.2. 類里的 static 成員初始化:類中的 stat

3、ic 變量是屬于類的,而不是屬于某個(gè)對(duì)象,它在整個(gè)程序的運(yùn)行過程中只有一個(gè) 副本,因此不能在定義對(duì)象時(shí)對(duì)變量初始化,就是不能用構(gòu)造函數(shù)來初始化。其正確的初始化方式是: <數(shù)據(jù)類型 ><類名 >:<靜態(tài)數(shù)據(jù)成員名 >=<值 > ,例如class fooprivate :const int i;public:foo(;.;int foo:i=100;這表明:(1初始化在類體外進(jìn)行,而前面不加 static ,以免與一般靜態(tài)變量或?qū)ο笙嗷煜?2初始化時(shí)不加該成員的訪問權(quán)限控制符 private , public 等。(3初始化時(shí)使用作用域運(yùn)算符來標(biāo)明

4、它所屬類,因此,靜態(tài)數(shù)據(jù)成員是類的成員,而不是 對(duì)象的成員。3. 類里的 static const 和 const static成員初始化:在找 static 成員的初始化學(xué)習(xí)資料時(shí),筆者發(fā)現(xiàn)了網(wǎng)上有很多關(guān)于 static const 成員,也就 是全局的靜態(tài)常量的初始化的資料。 const 成員要在構(gòu)造函數(shù)初始化,而 static 成員在需要 在在類體外初始化, 那么 static const 和 const static 的成員應(yīng)該在哪里進(jìn)行初始化呢?這兩 個(gè)寫法又會(huì)有什么不一樣嗎?這引起了筆者的興趣。 在網(wǎng)上查閱了相關(guān)資料和做了相關(guān)實(shí)驗(yàn) 后,筆者確認(rèn)了只要用 static 關(guān)鍵字修飾的成員的初始化方式和只有 static 關(guān)鍵字修飾的成 員一樣,都必須在類體外初始化,而無論 static 在 const 前面還是后面。比如:class Testpublic:static const int MASK1;static const int MASK2;const int Test:MASK1 = 0xFFFF;const int Test:MASK2 = 0xFFFF;至于兩種方式的區(qū)別, 我還不知道, 下面是在網(wǎng)上找到的一個(gè)關(guān)于它們區(qū)別的說法, 僅供大 家參

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論