C++類的靜態成員變量

#include<iostream>

using namespace std;
class Rect {
public:
	Rect() {
		count++;
	}
	~Rect() {
		count--;
	}
	static int getCount() {  // 靜態成員函數
		return count;
	}
private:
	int width;
	int length;
	static int count;  // 靜態成員變量count來計數
};

//int Rect::count = 0; 取消註釋纔不會編譯出錯

int main()
{
	Rect rect1;
	cout << "The count of Rect: " << Rect::getCount() << endl;

	Rect rect2(rect1);  // 新的對象需要使用老的對象來進行初始化
	cout << "The count of Rect: " << Rect::getCount() << endl;
	return 0;
}

靜態全局變量不能被其他文件所用,因而其他文件能夠定義相同名字的變量,而不會發生衝突。程序在內存中的四個位置:代碼區,全局數據區,堆區,棧區。在靜態局部變量前加static關鍵字,就定義了靜態局部變量。特點是:

  1. 該變量在全局數據區分配內存。
  2. 始終駐留在全局數據區,直到程序結束,但其作用域爲全局作用域,當定義它的函數或者語句塊結束的時候,作用域結束。
  3. 靜態成員在使用之前必須初始化,否則鏈接會出錯。

一般情況下,類的靜態成員變量不能在類內進行初始化.

  1. 靜態數據成員不屬於任何一個對象,因此並不是在創建對象的時候被定義的,這就意味着,他們並不是由類的構造函數初始化的。
  2. 必須在類的外部定義和初始化每個靜態成員,定義時使用類作用域運算符。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章