C 中的static的作用

2022-06-21 03:18:08 字數 3044 閱讀 8453

c++中的static的作用

c++中的關鍵字static,顧名思義表示靜止,靜態,下面是c++中static的一些常見應用

一,作用於函式內部的區域性變數

區域性作用域靜態變數的特點:當乙個函式返回後,下一次再呼叫時,該變數還會保持上一回的值,函式內部的靜態變數只開闢一次空間,且不會因為多次呼叫產生副本,也不會因為函式返回而失效

例如:

如果我想實現fun()函式功能:在函式內部定義count計數器,列印出每次呼叫它的次數,你可能會這樣寫,如下

#includeusing namespace std;

void fun()

int main()

我們預計結果為:

第一次呼叫,列印出結果 1

第二次呼叫,列印出結果 2

我們試著執行後,結果並不是我們想要的,如下圖:

兩次執行結果都是1,這是為什麼呢,原來是每次呼叫函式結束後,count值會失效,當再次呼叫函式時,count值會重新生成,初始值為1,這就達不到我們想要的結果,那該怎麼辦呢?這時候就需要static關鍵字作用的靜態變數,如下:

#includeusing namespace std;

void fun()

int main()

執行結果跟我們想要的結果就一致啦

另外,普通區域性變數如果未賦予初值,編譯器會報錯

報錯如下:

當區域性變數加上static 後,定義時未賦予初值時,會預設初始化0

二,作用於類的成員,解決同乙個類的不同物件之間資料和函式共享問題

1,作用於類的資料成員,使其成為靜態資料成員

靜態成員在每乙個類中只有乙個副本,由該類所有物件共同維護和使用,從而實現同乙個類的不同物件資料共享。需要注意的是,如下

訪問靜態資料成員方式:類名::識別符號

對靜態資料成員初始化:在類定義外進行

之所以進行類名::識別符號進行訪問,是因為靜態資料成語哪不屬於任何乙個物件,而在類外進行定義是因為需要以這種方式專門為他們分配空間。

舉例說明:

直接在類內定義靜態資料成員,編譯器會報錯

錯誤如下:

正確做法:

下面通過一段**,理解一下對於「同乙個類的不同物件資料共享」的理解,**如下:

#include using namespace std;

class point

point(point &p)

point()

int getx()

int gety()

void showcount()

private: //私有資料成員

int x, y;

static int count; //靜態資料成員宣告,用於記錄點的個數

};int point::count = 0; //靜態資料成員定義和初始化,使用類名限定

int main()

輸出結果:

這裡的point類裡面的a,b物件共有的屬性object count 都是2 。該執行結果清晰的顯示了同乙個類的不同物件資料共享的理解。

2,作用於類的函式成員,使其成為靜態函式成員

靜態成員函式就是使用static關鍵字宣告的函式成員,同靜態資料成員一樣,靜態成員函式也屬於整個類,由該類所有物件共同擁有,為所有物件共享

(1)靜態成員函式主要用於處理該類的靜態資料成員,可以直接呼叫靜態資料成員。如果訪問非靜態成員,要通過物件來訪問。例子如下:**

**

class a ;

void a::f(a a)

上面**中報錯如下:所以,靜態成員函式訪問非靜態成員,一定要通過物件來訪問(2)如果想在類外呼叫靜態成員函式呢?------類外**一般使用類名和作用域操作符來呼叫靜態成員函式。

訪問方式:一般通過類名::函式名呼叫,也可用類.函式名呼叫

舉例說明,如下:

三,總結:

當static作用於非類內函式的區域性變數時,每次函式呼叫不會隨著函式返回而失效,當static作用於類內成員時,由該類所有物件共同維護和使用,從而實現同乙個類的不同物件資料共享。

C中static的作用

1.static 變數靜態變數的型別 說明符是 static 靜態變數當然是屬於靜態儲存方式,但是屬於靜態儲存方式的量不一定就是靜態變數。例如外部變數雖屬於靜態 儲存方式,但不一定是靜態變數,必須由 static 加以定義後才能成為靜態外部變數,或稱靜態全域性變數。2.靜態區域性變數 靜態區域性變數...

C中static的作用

在c語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。1 先來介紹它的第一條也是最重要的一條 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。...

C 中static的作用

1 static可修飾的成員 首先我們先說以下static可修飾的成員 區域性變數 在區域性變數之前加上關鍵字static,區域性變數就稱為乙個區域性靜態變數,區域性靜態變數在記憶體中的位置 靜態儲存區 函式 在函式返回型別面前加static,函式就定義為靜態函式,靜態函式知識在宣告他的檔案當中可見...