C++ 類的靜態(tài)成員
如果我們希望某些成員與類直接相關(guān),而不是與類的對(duì)象相關(guān)。例如一個(gè)銀行賬戶需要一個(gè)成員表示基準(zhǔn)利率,那么我們希望利率和類關(guān)聯(lián),而不是和類的每個(gè)對(duì)象關(guān)聯(lián),更重要的是我們希望一旦利率改變,所有的對(duì)象都能直接改變?yōu)樾轮怠?/p>
聲明靜態(tài)成員
類的靜態(tài)成員存在于任何對(duì)象之外,對(duì)象中不包含任何與靜態(tài)數(shù)據(jù)成員有關(guān)的數(shù)據(jù),所以每個(gè)Account對(duì)象包含兩個(gè)數(shù)據(jù)成員owner和amount,存在一個(gè)interestRate對(duì)象并且被所有Account共享。
由于靜態(tài)成員函數(shù)不和任何對(duì)象綁定,他們沒有this指針。所以沒有this指針的一系列操作。
使用類的靜態(tài)成員
依舊是作用域運(yùn)算符訪問成員。
雖然靜態(tài)成員函數(shù)不屬于類的某個(gè)對(duì)象,但是我們依然可以使用類的對(duì)象、引用或者指針來訪問
成員函數(shù)不用通過作用域運(yùn)算符直接使用靜態(tài)成員
定義靜態(tài)成員
如果我們?cè)陬惖耐獠慷x靜態(tài)成員時(shí),不能重復(fù)static關(guān)鍵字,static只出現(xiàn)在類內(nèi)部的聲明中
因?yàn)殪o態(tài)數(shù)據(jù)成員不屬于類的任何一個(gè)對(duì)象,所以他們并不是在創(chuàng)建類的對(duì)象時(shí)被定義的,他們不是由類的構(gòu)造函數(shù)初始化的,一般來說我們不能在類的內(nèi)部初始化靜態(tài)成員,必須在類的外部定義和初始化每個(gè)靜態(tài)成員。
類似于全局變量,靜態(tài)數(shù)據(jù)成員定義在任何函數(shù)之外,因此一旦他被定義,就將一直存在程序的整個(gè)聲明周期中。
雖然initRate是私有的,但是我們也能用它來初始化interestRate,interestRate的定義也能訪問類的私有成員。
靜態(tài)成員的類內(nèi)初始化
我們可以為靜態(tài)成員提供const類型的類內(nèi)初始值。
這里我們用靜態(tài)變量定義了數(shù)組成員的維度。
?靜態(tài)數(shù)據(jù)成員可以是不完全類型,但數(shù)據(jù)成員要是完全類型。
特別的是,靜態(tài)數(shù)據(jù)成員的類型可以就是他所屬的類類型,而非靜態(tài)數(shù)據(jù)成員只能聲明成他所屬類的指針或引用。
靜態(tài)成員可以作為默認(rèn)實(shí)參
非靜態(tài)數(shù)據(jù)成員不能作為默認(rèn)實(shí)參,因?yàn)樗闹当旧韺儆趯?duì)象的一部分,這么做的話,無法真正提供一個(gè)對(duì)象以便從中獲取成員的值,從而引發(fā)錯(cuò)誤。