學習筆記 關於static關鍵字(c )

2021-09-13 13:12:12 字數 1529 閱讀 1307

1. 隱藏(避免不同檔案的函式和變數命名衝突)

2.生命週期(對於變數來說必須在程式開始執行時進行初始化,不可改變)

1.如果作為static的區域性變數可以在函式內定義,它的生存期為整個源程式,但是其作用域仍與自動變數相同,只能在定義該變數的函式內使用該變數。

2.退出該函式後, 儘管該變數還繼續存在,但不能使用它。

3.static變數是預設初始化為0,其實全域性變數也具備這一屬性,因為全域性變數也儲存在靜態資料區。在靜態資料區,記憶體中所有的位元組預設值都是0x00。

3.在類中定義(必須進行初始化)

static宣告的變數和成員函式:

1.初始化時使用作用域運算子來標明它所屬類;

2.靜態資料成員是類的成員,而不是物件的成員;

3.對其取位址操作,變數位址是指向其資料型別的指標 ,函式位址型別是乙個「nonmember函式指標」。

4.static並沒有增加程式的時空開銷,相反還縮短了子類對父類靜態成員的訪問 時間,節省了子類的記憶體空間。

static宣告的成員函式:

1.沒有this指標,僅能訪問類的靜態資料和靜態成員函式;

2.不能被定義為虛函式;

4.初始化

靜態成員初始化與一般資料成員初始化不同:

1.初始化在類體外進行,而前面不加static,以免與一般靜態變數或物件相混淆;

2.初始化時不加該成員的訪問許可權控制符private,public等;

3.初始化時使用作用域運算子來標明它所屬類;

所以我們得出靜態資料成員初始化的格式:

《資料型別》《類名》::《靜態資料成員名》=《值》

ps:為了防止父類的影響,可以在子類定義乙個與父類相同的靜態變數,以遮蔽父類的影響。這裡有一點需要注意:靜態成員為父類和子類共享,重複定義了靜態成員,我們的編譯器採用了一種絕妙的手法:name-mangling 用以生成唯一的標誌以避免錯誤。

關於static 在類中的使用問題,個人的學習心得如下

why use static?

1.用於實現在同乙個類中,多個物件中共享資料,協調物件間的公用資料;

2.靜態變數有著全域性變數的優勢,又不會被濫用,需要靜態成員函式管理靜態變數;

3.類的靜態成員既屬於類,也屬於物件;

怎麼用?

1.static 修飾資料成員需要進行初始化;

2.在類外進行初始化,類外不需要帶 static 關鍵字;

3.類的宣告和實現不在同一檔案中時 ,在.cpp檔案中進行初始化,避免多重定義(不能在.**件進行定義函式和變數);

4.static 宣告的資料成員,不佔類物件的空間,不依賴於物件;

5.可以用《類名》::《靜態資料成員名》 使用,受許可權的控制;

6.static修飾函式,目的是為了管理靜態變數,只能訪問靜態資料成員和靜態成員函式,因為靜態成員函式沒有this指標;

7.非靜態成員函式,是可以訪問靜態成員的。

static關鍵字筆記

static關鍵字 作用 是乙個修飾符,用於修飾成員 成員變數,成員方法 1.被static 修飾後的成員變數只有乙份 2.當成員被static修飾之後,多了一種訪問方式,除了可以物件呼叫之外,還可以被類直接呼叫 類名.靜態成員 static的特點 1.隨著類的載入而被載入 2.優先於物件的存在 3...

關鍵字static學習

關於static關鍵字的使用,它可以用來修飾的成員變數和成員方法,被修飾的成員是屬於類的,而不是單單是屬 於某個物件的。也就是說,既然屬於類,就可以不靠建立物件來呼叫了。當 static 修飾成員變數時,該變數稱為類變數。該類的每個物件都共享同乙個類變數的值。任何物件都可以更改 該類變數的值,但也可...

Java學習筆記 static關鍵字

1 可以修飾成員變數和成員方法 2 隨著類的載入而載入 3 優先於物件存在 4 被類的所有物件共享 這是我們判斷該不該使用靜態的依據 5 通過類名呼叫 既可以通過物件名呼叫,也可以通過類名呼叫,建議通過類名呼叫 靜態的內容在方法區的靜態區 1 在靜態中沒有this物件 2 靜態只能訪問靜態 1 所屬...