C++ 類的靜態成員

鋸齒流沙發表於2017-12-27

本文淺談一下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();
}
複製程式碼

C++.png

說明:靜態資料成員是在靜態儲存區分配空間,具有靜態生命期,即存在於程式執行期間,直到程式執行結束,與物件的生、死無關。不分公有、私有,均在類外定義。

使用: 與普通的資料成員一樣,成員函式可以在類內直接訪問靜態資料成員,即可以在建構函式、一般成員函式、解構函式、靜態成員函式中訪問靜態成員。

對於公有的靜態資料成員,還可以通過下列格式在類外呼叫: 類名::靜態資料成員(推薦使用) 或 物件.靜態資料成員(不推薦使用,這容易讓人誤以為靜態資料成員依賴於物件,其實它與具體物件無關)

對於私有的靜態資料成員,不允許在類外直接訪問,但可以利用稍後介紹的公有靜態成員函式來間接訪問。

靜態資料成員用得較多的場合: 儲存流動變化的物件的個數(在建構函式、拷貝建構函式中物件個數增加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();
}
複製程式碼

呼叫:

對於公有的靜態成員函式,可以通過下列格式在類外呼叫:

類名::靜態成員函式([實參表]) (推薦使用)

物件名.靜態成員函式([實參表]) (不推薦使用,這容易讓人誤以為靜態成員函式依賴於物件,其實它與具體物件無關)

提醒:對於公有的非靜態成員函式,只能採用

物件.非靜態成員函式([實參表]) 格式在類外呼叫,若採用 類名::非靜態成員函式([實參表]) 格式呼叫,將出錯!

相關文章