c++中static關鍵字使用總結
作用 | 參考程式碼 | 備註 | |
面向物件中的static | 靜態全域性變數 |
|
(1)該變數在全域性資料區分配記憶體;具有全域性壽命; (2)未經過初始化的靜態全域性變數,預設初始化為0; (3)a為靜態變數,並且是全域性的,只能在定義a的檔案中使用a,在其他的檔案中不可見 |
靜態區域性變數 |
void fun() { int a = 1; static int b = 2; } void main() { static int b = 3; } |
(1)靜態區域性變數在全域性資料區分配記憶體,具有全域性壽命; (2)靜態區域性變數在物件被第一次宣告時初始化,以後的呼叫都不用再初始化。 (3)未被初始化的靜態區域性變數,預設初始化為0; |
|
靜態函式 |
static void fun () { //code } |
只能在定義它的檔案中使用,在其他檔案不可見。 | |
面向過程中的static (在類中使用) |
靜態資料成員 |
程式見下面pro1 |
(1)非靜態資料成員,每個類物件都有自己的拷貝。然而靜態資料成員,不管這個類被物件被定義了多少次,都只有一個拷貝,所有物件共享這一個拷貝,所有物件共用,它的值可以更新。 (2)靜態資料成員儲存在全域性資料區,不能再類的宣告中定義。語句int Point::countP = 0;是定義靜態資料成員。 (3)由於靜態資料成員在全域性資料區分配記憶體,所以它不屬於特定物件,在沒有類的例項情況下就可以操作它。 (4)靜態資料成員初始化格式: <資料型別><類名>::<靜態資料成員名>=<值> 注意只能在全域性區初始化,不可以在類內部初始化。 訪問形式: <類物件名>.<靜態資料成員名> <類物件指標> -> <靜態資料成員名> <類名>::<靜態資料成員名> (5)靜態資料成員同樣遵循public、protected、private訪問規則。 |
靜態成員函式 |
與靜態資料成員規則一樣。 訪問形式: <類名稱>::<靜態成員函式名>(引數列表); 類物件操作符. 和該物件指標 -> |
pro1:
#include<iostream>
using namespace std;
class Point
{
public:
Point(int xx = 0, int yy = 0)
{
this->X = xx;
this->Y = yy;
countP ++;
}
Point(Point &p);
~Point() { countP --; }
int GetX() const{ return this->X; }
int GetY() const{ return this->Y; }
void GetC() const{ cout << "Object id = " << countP << endl; } //輸出靜態資料成員
private:
int X, Y;
static int countP; //靜態資料成員宣告,用於記錄點的個數
};
Point :: Point(Point &p)
{
this->X = p.X;
this->Y = p.Y;
countP ++; //在建構函式中對countP累加,所有物件共同維護同一個countP
}
int Point :: countP = 0; //靜態資料成員定義和初始化,使用類名限定
int main()
{
Point A(4, 5); // 定義物件A,其建構函式會使countP增1
A.GetC(); //輸出物件個數
Point B(A); //定義物件B,其建構函式會使countP增1
B.GetC();
return 0;
}