類中的靜態成員真是個讓人愛恨交加的特性。我曾經在面試時,被主考官抓住這個問題一陣窮追猛打,直把我問的面紅耳赤,敗下陣來。所以回來之後,我痛定思痛,決定好好總結一下靜態類成員的知識點,以便自己在以後面試中,在此類問題上不在被動。
靜態類成員包括靜態資料成員和靜態函式成員兩部分。
一 靜態資料成員:
類體中的資料成員的宣告前加上static關鍵字,該資料成員就成為了該類的靜態資料成員。和其他資料成員一樣,靜態資料成員也遵守public/protected/private訪問規則。同時,靜態資料成員還具有以下特點:
1.靜態資料成員的定義。
靜態資料成員實際上是類域中的全域性變數。所以,靜態資料成員的定義(初始化)不應該被放在標頭檔案中。
其定義方式與全域性變數相同。舉例如下:
***.h檔案
class base;
***.cpp檔案
const int base::_i=10;//定義(初始化)時不受private和protected訪問限制.
注:不要試圖在標頭檔案中定義(初始化)靜態資料成員。在大多數的情況下,這樣做會引起重複定義這樣的錯誤。即使加上#ifndef #define #endif或者#pragma once也不行。
2.靜態資料成員被 類 的所有物件所共享,包括該類派生類的物件。即派生類物件與基類物件共享基類的靜態資料成員。舉例如下:
class base;
int base::_num=0;//靜態資料成員的真正定義
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,所以普通成員函式只能在建立物件後通過物件來呼...