Static 靜態變數

2021-08-28 15:54:01 字數 1684 閱讀 6685

1.靜態變數:是由靜態修飾符static來修飾的,是類的變數,但是不屬於任何乙個類的具體物件,也就是說,也就是說,對於該類的任何乙個具體的物件來說,靜態變數是乙個公共的儲存單元,任何乙個類的物件在訪問這個儲存單元時,都會獲得乙個同樣的數值,同樣,任何乙個類在修改這個儲存單元時,也都會完成相同的操作。這樣我們就可以理解成物件共享了靜態變數。

2.靜態方法也是由static修飾符來修飾的,靜態方法是屬於整個類的方法:

首先,呼叫靜態方法時,應該是使用類名做字首進行呼叫,而不是用  類名  c=new 類名();建立物件名來呼叫,因為靜態方法屬於整個類的方法。

其次,非靜態的方法屬於某個物件的方法,是在這個物件在被建立時,系統為物件的方法在記憶體中分配單獨的專用空間;而靜態的方法則是屬於整個內的方法,它隨著類的定義而在記憶體中進行分配,不屬於任何乙個物件。

最後,靜態方法屬於整個類的,因此它不能對某個物件的成員進行操作和處理,而只能對某個類的成員變數進行操作和處理,也就是說,靜態方法只能處理靜態資料。

靜態方法中沒有this引用,不能在靜態方法中訪問非靜態的成員和方法;

在同乙個類中,靜態的方法不能呼叫非靜態的方法,但是在非靜態方法中能呼叫靜態的方法;

3.使用static成員而不是全域性物件有優點如下:

1. static成員的名字是在類的作用域中,因此可以避免與其他類的成員或全域性物件名字衝突

2. 可以實施封裝。static成員可以是私有成員,而全域性物件不可以。

3. static成員是與特定類關聯,並不與該類的物件相關聯。程式**意圖清晰

4.靜態全域性變數與全域性變數區別

靜態全域性成員:全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數;

儲存方式:全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。因為全域性/靜態區記憶體中儲存區都指向的是乙個地方,所以儲存方式、所在儲存區沒有區別。

作用域:

非靜態全域性變數的作用域是整個源程式, 當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。

靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用, 因此可以避免在其它原始檔中引起錯誤。

例如 如果在a1.cpp定義個全域性變數 int nextern = 55;

那麼在a2.cpp中 雖然沒有include a1  但是 只要 extern nextern; 後就可以使用這個全域性變數了。       

而靜態全域性變數 只能在 include它所在類的 標頭檔案後,才能使用 ctest1::snum。 (該例子有歧義待完善)

區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。

全域性變數改變為靜態變數後是改變了它的作用域, 限制了它的使用範圍。

extern全域性變數、static全域性變數和static區域性變數的生存期都是「永久」,區別只是可見域不同。

extern全域性變數可見區域是工程,static全域性變數可見區域是檔案,//而static區域性變數的可見區域是塊。

mfc中:

在.h的class中定義static int snnum 乙個靜態區域性變數, 必須在.cpp中所有函式外部進行初始化後方可使用。

static 靜態變數

function a a a a 輸出什麼是static靜態變數?以下為在c語言中的理解 靜態變數 型別說明符是static。靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區 在靜態儲存區內分配儲存單元 該 區域中的資料在整個程式的執行期間一直占用這些儲存空間 在程式整個執行期間都不釋放 ...

靜態變數static

static資料的初始化 加上static限定的字段,是所謂的類字段,也就是說這個欄位的擁有者不是物件而是類。無論建立多少物件,static資料都只有乙份。類內總是先初始化static欄位,再初始化一般字段。接著初始化構造器。但是如果不建立這個類的物件,那這個物件是不會進行初始化的,並且只執行一次。...

static靜態變數

靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區 在 靜態儲存區內分配儲存單元 該區域中的資料在整個程式的執行期間一直占用這些儲存空間 在程式整個執行期間都不釋放 也可以認為是其記憶體位址不變,直 到整個程式執行結束 相反,而auto自動變數,即動態區域性變數,屬於動態儲存類別,佔動態儲存...