有時候類需要它的一些成員與類本身直接相關(guān),而不是與類的各個對象保持關(guān)聯(lián)。
我們通過在成員的聲明之前加上關(guān)鍵字 static 使得其與類關(guān)聯(lián)在一起。靜態(tài)成員可以是 public 或 provate 的室抽。
靜態(tài)數(shù)據(jù)成員的類型可以是常量、引用靡努、指針坪圾、類類型等
類的靜態(tài)成員存在于任何對象之外,對象中不包含任何與靜態(tài)數(shù)據(jù)成員有關(guān)的數(shù)據(jù)惑朦。
靜態(tài)成員函數(shù)也不與任何對象綁定在一起,它不包含 this 指針漾月。作為結(jié)果,靜態(tài)成員函數(shù)不能成名成 const 的蜓陌,而且我們也不能在 static 函數(shù)體內(nèi)使用 this 指針吩蔑。這一限制既適用于 this 的顯式使用,也對調(diào)用非靜態(tài)成員的隱式使用有效隧期。
靜態(tài)成員雖不屬于類的某個對象仆潮,但是我們?nèi)匀豢梢允褂妙惖膶ο蟆⒁没蛑羔榿碓L問靜態(tài)成員性置。
我們既可以在類的內(nèi)部也可以在類的外部定義靜態(tài)成員函數(shù)鹏浅。
當在類的外部定義靜態(tài)成員時,不能重復(fù) static 關(guān)鍵字,該關(guān)鍵字只出現(xiàn)在類內(nèi)部的聲明語句
因為靜態(tài)數(shù)據(jù)成員不屬于類的任何一個對象凰萨,所以它們并不是創(chuàng)建類的對象時被定義的械馆。所以其并不是由類的構(gòu)造函數(shù)初始化的。且一般來說珊搀,不能在類的內(nèi)部初始化靜態(tài)成員尾菇。必須在類的外部定義和初始化每個靜態(tài)成員。一個靜態(tài)數(shù)據(jù)成員只能定義一次派诬。
靜態(tài)數(shù)據(jù)成員定義在任何函數(shù)之外默赂。因此一旦它被定義,就將一直存在于程序的整個聲明周期中缆八。
我們定義靜態(tài)數(shù)據(jù)成員的方式和在類的外部定義成員函數(shù)差不多。需要指定對象的類型名栏妖、類名奖恰、作用域運算符咙鞍、成員自己的名字趾徽。
從類名開始孵奶,剩余的部分都位于類的作用域之內(nèi),因此可以直接使用 initRate 函數(shù)對其及進行初始化朗恳。
類的靜態(tài)成員不應(yīng)該在類的內(nèi)部初始化载绿,但我們以及為靜態(tài)成員提供 const 整數(shù)類型的類內(nèi)初始值,不過要求靜態(tài)成員必須是字面值常量類型的 constexpr 怀浆。初始值必須時常量表達式怕享。
靜態(tài)成員獨立于任何對象,因此在某些非靜態(tài)數(shù)據(jù)成員可能非法的場合函筋,靜態(tài)成員可以正常地使用跌帐。
非靜態(tài)數(shù)據(jù)成員不能作為默認實參谨敛,因為它的值本身屬于對象的一部分。