本文淺談一下C++中類的靜態成員,而類的靜態成員有兩種型別:
1、靜態資料成員
2、靜態成員函式
靜態成員的適用場合:適合處理屬於類中所有物件共有的資料,實現物件間的資料共享。
基本方法:在類的資料成員或成員函式前加上 static 關鍵字。
初始化格式: 資料型別名 類名::資料成員名[=初值];
class Count{
public:
static int total;
public:
static void mycount(){
total++;
cout << "總數為:" << total << endl;
}
};
//靜態屬性初始化賦值
int Count::total = 5;
void main(){
Count::total++;
cout << Count::total << endl;
//直接通過類名訪問
Count::mycount();
//也可以通過物件名訪問
Count c;
c.mycount();
getchar();
}
複製程式碼
說明:靜態資料成員是在靜態儲存區分配空間,具有靜態生命期,即存在於程式執行期間,直到程式執行結束,與物件的生、死無關。不分公有、私有,均在類外定義。
使用: 與普通的資料成員一樣,成員函式可以在類內直接訪問靜態資料成員,即可以在建構函式、一般成員函式、解構函式、靜態成員函式中訪問靜態成員。
對於公有的靜態資料成員,還可以通過下列格式在類外呼叫: 類名::靜態資料成員(推薦使用) 或 物件.靜態資料成員(不推薦使用,這容易讓人誤以為靜態資料成員依賴於物件,其實它與具體物件無關)
對於私有的靜態資料成員,不允許在類外直接訪問,但可以利用稍後介紹的公有靜態成員函式來間接訪問。
靜態資料成員用得較多的場合: 儲存流動變化的物件的個數(在建構函式、拷貝建構函式中物件個數增加1,在解構函式中物件個數減少1)
靜態成員函式
定義:
class 類名
{
…
static 型別名 成員函式名([形參表])
{
函式體
}
…
};
複製程式碼
說明:
1)、靜態成員函式不需要初始化;
2)、靜態成員函式可以直接引用本類的靜態資料成員;
3)、靜態成員函式的設定主要是為了處理靜態資料成員,通常設定為公有許可權;
4)、靜態成員函式沒有this指標,不能直接訪問普通的資料成員(即非靜態資料成員),否則,將出錯;
5)、靜態成員函式可以用物件作為函式的引數,間接訪問普通的資料成員(即非靜態資料成員)。
void main(){
Count::total++;
cout << Count::total << endl;
//直接通過類名訪問
Count::mycount();
//也可以通過物件名訪問
Count c;
c.mycount();
getchar();
}
複製程式碼
呼叫:
對於公有的靜態成員函式,可以通過下列格式在類外呼叫:
類名::靜態成員函式([實參表]) (推薦使用)
或
物件名.靜態成員函式([實參表]) (不推薦使用,這容易讓人誤以為靜態成員函式依賴於物件,其實它與具體物件無關)
提醒:對於公有的非靜態成員函式,只能採用
物件.非靜態成員函式([實參表]) 格式在類外呼叫,若採用 類名::非靜態成員函式([實參表]) 格式呼叫,將出錯!