1. 程式人生 > >c++中static關鍵字使用總結

c++中static關鍵字使用總結

作用 參考程式碼 備註
面向物件中的static 靜態全域性變數
static int a = 5;   //預設為extern
int b = 6;  //預設為extern
int main( )
{
      //code
}

(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;
}