靜態(tài)成員的概述
- 在類(lèi)內(nèi)數(shù)據(jù)成員的聲明前加上關(guān)鍵字static,該數(shù)據(jù)成員就是類(lèi)內(nèi)的靜態(tài)數(shù)據(jù)成員,使得其與類(lèi)關(guān)聯(lián)在一起;
幾個(gè)重要的特點(diǎn)
- 靜態(tài)成員可以是public或者private的;
- 靜態(tài)數(shù)據(jù)成員的類(lèi)型可以是常量、引用、指針、類(lèi)類(lèi)型等;
- 類(lèi)的靜態(tài)成員存在于任何對(duì)象之外,對(duì)象中不包含任何與靜態(tài)成員有關(guān)的數(shù)據(jù),也就是任何對(duì)象的成員不包含靜態(tài)成員;
- 靜態(tài)成員函數(shù)也不與任何對(duì)象綁定在一起,它們不包含this指針;
- 靜態(tài)成員函數(shù)不能聲明成const的,而且我們也不能在static函數(shù)體內(nèi)使用this指針。
訪問(wèn)靜態(tài)成員
- 可以使用類(lèi)的對(duì)象、引用或者指針來(lái)訪問(wèn)靜態(tài)成員;
- 可以通過(guò)類(lèi)和作用域運(yùn)算符直接訪問(wèn)靜態(tài)變量。
定義靜態(tài)成員
- 既可以在類(lèi)的內(nèi)部,也可以在類(lèi)的外部定義靜態(tài)成員函數(shù)。(在類(lèi)外定義時(shí),不能重復(fù)static關(guān)鍵字,該關(guān)鍵字只出現(xiàn)在類(lèi)的內(nèi)部)
- 因?yàn)殪o態(tài)數(shù)據(jù)成員不屬于類(lèi)的任一對(duì)象,所以他們并不是在創(chuàng)建類(lèi)時(shí)被定義的;
- 不能在類(lèi)的內(nèi)部初始化靜態(tài)成員,必須在類(lèi)外部定義和初始化每個(gè)靜態(tài)成員。也不用構(gòu)造函數(shù)初始化;
- 不過(guò),可以為靜態(tài)成員提供const整數(shù)類(lèi)型的類(lèi)內(nèi)初始值,但要求靜態(tài)成員必須是字面值常量類(lèi)型的constexpr,初始值必須為常量表達(dá)式。
靜態(tài)成員其他使用
- 靜態(tài)成員和指針成員可以是不完全類(lèi)型(?);
- 可以使用靜態(tài)成員作為默認(rèn)實(shí)參。
(注:不完全類(lèi)型是已聲明但未定義的類(lèi)。)