#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關鍵字,就定義了靜態局部變量。特點是:
- 該變量在全局數據區分配內存。
- 始終駐留在全局數據區,直到程序結束,但其作用域爲全局作用域,當定義它的函數或者語句塊結束的時候,作用域結束。
- 靜態成員在使用之前必須初始化,否則鏈接會出錯。
一般情況下,類的靜態成員變量不能在類內進行初始化.
- 靜態數據成員不屬於任何一個對象,因此並不是在創建對象的時候被定義的,這就意味着,他們並不是由類的構造函數初始化的。
- 必須在類的外部定義和初始化每個靜態成員,定義時使用類作用域運算符。