C++靜態成員變量和成員函數

static加在局部變量的前面改變其存儲類型使之成爲靜態局部變量,會延長它的生存週期,但是注意不會改變其作用域!!!

static加在全局變量的前面會限制該變量作用域爲文件作用域,也就是說static全局變量只能在定義該變量的文件中使用,不能被其它文件使用。

加在函數定義或聲明的前面,也是限制函數作用域到文件作用域。

到了C++中,關鍵字static除了繼續保留上面的特性外,還可以用來修飾類的成員變量和成員函數,使之成爲靜態成員變量和靜態成員函數,靜態成員變量和靜態成員函數統稱爲靜態成員。

在使用靜態成員的時候,有一些規則限制,本文通過幾個簡單的例子來總結靜態成員使用規則,希望大家通過閱讀本文能夠對類的靜態成員變量和成員函數有更爲深刻的認識。

1sizeof不將靜態成員變量的大小計算在內

首先看第一個例子,例子很簡單,有點C++基礎的同學都能看懂,這裏重點是通過例子來說明C++靜態成員的一些特性和容易出錯的地方
在這裏插入圖片描述
從運行結果看,sizeof(Test)爲4,只是普通成員m_val的大小,驗證了sizeof運算符不會將靜態成員變量的大小計算在內,

此外需要注意的是,上面代碼的第20行 int Test::m_count = 0;是靜態成員變量的初始化,如果在使用靜態成員變量的時候不進行初始化,鏈接的時候會出錯,有興趣的同學可以試試將第20行註釋掉,再編譯看看會出現什麼情況。

2可以通過類名來訪問靜態成員

靜態成員是屬於類的,而不是屬於某個對象的。即便沒有任何一個實例,類的靜態成員變量也已經存在了,因此靜態成員除了能夠和普通成員一樣通過對象訪問外,還可以通過類名訪問, 訪問形式爲 類名::成員名

在這裏插入圖片描述
在這裏插入圖片描述
此外,還需要注意的是,靜態成員同樣受到private,public等的限制,因此在類外通過類名訪問時,需要其訪問權限爲public。

3靜態成員函數不能訪問類的非靜態成員

由於靜態成員函數屬於整個類,在類實例化對象之前就已經分配空間了,而類的非靜態成員必須在類實例化對象後纔有內存空間,因此在靜態成員函數中訪問非靜態成員變量或者調用非靜態成員函數就會出錯。
在這裏插入圖片描述
好了,本文到此已經結束了,是不是很簡單,正是因爲簡單在平時的時候就更應該注意,否則真的是太low了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章