用static修飾類中的資料成員,被稱為靜態資料成員。他並不依賴於物件的例項化,而依賴於類。所以靜態資料成員不在建構函式中初始化,它單獨進行初始化;就算物件沒有例項化,他也存在。而普通資料成員依賴於物件的例項化,若物件沒有例項化,它就不存在。
假設有乙個tank類
class tank
;
若物件還沒有例項化,可以用類名::靜態資料成員名稱來訪問
tank::s_icount;
普通資料成員和靜態資料成員的區別:
例項化tank之後,s_icount的值會變化,但是他在記憶體中的個數仍然為1個,而m_strcode會有很多個(根據例項化了幾個物件)
因此,靜態資料成員只有乙份
理論:靜態成員函式不能呼叫非靜態成員函式和非靜態資料成員,但是可以呼叫靜態資料成員
原理:還是前面的**
static int getcount()
因為靜態成員函式同樣也不依賴於物件,所以在這個靜態成員函式的引數中無this指標,那麼在呼叫非靜態資料成員m_strcode的時候,編譯器無法知道呼叫哪乙個物件的資料成員,則會編譯出錯。
而靜態成員函式可以呼叫靜態資料成員是因為靜態資料成員在記憶體中就乙個,不需要區分。
注:static成員函式不可以用const修飾,因為用const修飾的成員函式,實質上是const修飾的成員函式引數中隱藏的this指標,而static成員函式無this指標。
#includeusing namespace std;
class tank
;int tank::s_icount = 10;//對靜態資料成員初始化,在建構函式的外面進行
C static靜態成員
class a a void fun 普通成員函式 static void printnum 靜態成員函式 private int m a 普通成員變數 int m b 普通成員變數 static int num 靜態成員變數 靜態成員必須在定義類的檔案中對靜態成員變數進行初始化,否則會編譯出錯。i...
C static 靜態成員
靜態成員包括靜態資料成員和靜態成員函式,提供了同類物件間資料成員的共享機制 靜態成員不是某個物件的成員,是類所有物件的共享成員,只建立乙個成員副本 定義格式 static 型別 成員名 引用格式 類名 靜態成員 初始化格式 型別 類名 靜態資料成員 初始化值 靜態資料成員為同類所有物件所共享,不能使...
C static靜態成員函式
在類中,static 除了可以宣告靜態成員變數,還可以宣告靜態成員函式。普通成員函式可以訪問所有成員 包括成員變數和成員函式 靜態成員函式只能訪問靜態成員。編譯器在編譯乙個普通成員函式時,會隱式地增加乙個形參 this,並把當前物件的位址賦值給 this,所以普通成員函式只能在建立物件後通過物件來呼...