static靜態不是很靜

2022-07-25 05:09:08 字數 1788 閱讀 8206

在類中定義變數時,不會開闢儲存空間,只有類定義乙個物件時才會開闢類中成員變數的記憶體空間,且建立乙個物件開闢一次,大小與類中的成員變數及函式有關。而static在靜態區開闢記憶體空間,不占用記憶體空間。

1.函式內部的靜態變數

在程式執行時,我們有時候希望乙個變數的值在函式兩次呼叫時他能分別保持上一次執行的結果,而不是每次呼叫都初始化為初值,實現這樣的效果可以通過定義乙個全域性變數來實現,但是這個全域性變數不僅這個函式可以使用,別的函式同樣也可以改變它的值,不能完全保證只受乙個函式控制,但是,如果在函式內部定義乙個static變數,這個變數儲存在靜態資料區,而不是堆疊中,這個變數只在函式第一次呼叫時初始化一次,以後它將在兩次函式呼叫之間保持它的值。

2.函式內部的靜態物件

在類中,使用者自定義型別,必須用建構函式初始化。因此,如果在定義乙個靜態物件是時沒有指定構造函式引數,這個類必須有預設的建構函式。

1

class

x//預設建構函式

5 ~x();6};

78void

f()9

1314

intmain()

15

3.控制連線

有時候想讓乙個變數在檔案範圍內是可見的,這個檔案內的所有函式都可以使用它,但不想讓這個檔案之外的函式看到或訪問該變數,不與外部識別符號衝突。就可以使用sataic在.cpp中來限制變數,這樣,這個變數只區域性與該單元,在其它翻譯單元中可以使用同樣的名字而不會衝突。

4.定義靜態資料成員

在類的資料成員中如果是靜態常量(static const)可以在類內提供定義賦值初始化,但是對於全部型別的陣列(即使是靜態常量陣列)必須為其提供專門的外部定義。

1

class

withstatic216

17};

1819

int withstatic::x = 1;20

//定義必須出現在類的外部,且只能定義一次,最終使用由類的構造者控制

21int withstatic::y = 2;22

const

int withstatic::scsize[ ] = ;

23//

陣列的定義也只能在類的外部實現。

24int withstatic::sxsize[ ] = ;

25const

int withstatic::w=10;//

常量也可以在類的外部實現。

2627

intmain()

28

5.靜態成員函式

像靜態資料成員一樣,靜態成員函式為類的全體物件服務,而不是某個特殊物件的專屬,這樣就不需要定義乙個全域性函式,而是移到了類的內部起到到全域性的作用。靜態成員函式一般用類域(類名::函式名())去呼叫,從概念上體現靜態成員函式為整個類所有。

1

classx2

;67int

main()

8

靜態成員函式不能訪問一般的資料成員(沒有預設的this指標),只能訪問靜態資料成員,也只能呼叫其他的靜態成員函式。

1

classx2

1112

int val() const

1314

static

intincr()

1520

21static

intf()

2226

27};

2829

int x::j = 5;//

定義初始化

3031

intmain()

32

static 靜態方法

乙個不需要任何主叫物件的方法就是靜態方法。靜態方法需要關鍵字static來宣告於定義,他不需要主叫物件,因為它不屬於物件而是屬於類。靜態方法可以被子類繼承,也可以被重寫,但是不能實現多型性。多型性的實現重點在於動態繫結,每一次在呼叫相應方法的時候都是去動態查詢匹配,靜態方法是在類初次載入的時候就已經...

static靜態方法

static也可以修飾方法,使之成為靜態方法,我們通常用的入口函式,也就是main方法就是乙個靜態方法。注意事項 靜態方法可以直接呼叫靜態變數,不能呼叫非靜態成員變數。public class helloworld 2.可以通過建立類的物件來呼叫非靜態成員 public class hellowor...

靜態static 筆記

1.類物件共享 2.類載入時產生,銷毀時釋放,生命週期長 靜態成員的訪問 1.物件.成員 2.類名.成員 static放於屬性名前稱作靜態屬性 類屬性 static放於方法名前稱作靜態方法 類方法 推薦呼叫方式 類名.靜態成員 在成員方法中,可以直接訪問類中的靜態成員 靜態方法中不能直接訪問同乙個類...