靜態成員是能夠獨立訪問的,也就是說,無須建立任何對象實例就能夠訪問,而靜態成員函數可不創建對象就能夠被使用。
或者說靜態函數與通常函數沒有太大的區別,只是訪問有限制,靜態變量跟通常的全局變量的區別就是訪問有限制。函數
static變量this
static變量不像普通的變量,static變量獨立於一切類對象處在。static修飾的變量先於對象存在,因此static修飾的變量要在類外初始化。由於static是全部對象共享的東西嘛,必需要比對象先存在的spa
class test { private: public: static int i; }; int test::i = 100;//此句包含了聲明和賦值,初始化不受private和protected訪問限制,可是如果priivate,下面main函數就沒法訪問 int main() { cout << test::i << endl; return 0; }
好處:用static修飾的成員變量在對象中是不佔內存的,由於他不是跟對象一塊兒在堆或者棧中生成,用static修飾的變量在靜態存儲區生成的,因此用static修飾一方面的好處是能夠節省對象的內存空間。因此通常類const變量通常改成static const變量,能夠節省一些空間。指針
-靜態成員變量屬於整個類全部
-靜態成員變量的生命期不依賴於任何對象,爲程序的生命週期
-能夠經過類名直接訪問公有靜態成員變量
-全部對象共享類的靜態成員變量
-能夠經過對象名訪問公有靜態成員變量
-靜態成員變量須要在類外單獨分配空間
-靜態成員變量在程序內部位於全局數據區 (Type className::VarName = value)
code
static成員函數 對象
static函數也是類函數,因此在寫定義時也要寫明屬於哪一個類。與不一樣類函數不一樣的是,它沒有傳入this指針,正由於沒有this指針,因此static類成員函數不能訪問非static的類成員,只能訪問 static修飾的類成員。
靜態成員函數不能夠同時聲明爲 virtual、const、volatile函數。blog
類的成員函數有以下特性: -靜態成員函數是類的一個特殊的成員函數
-靜態成員函數屬於整個類全部,沒有this指針
-靜態成員函數只能直接訪問靜態成員變量和靜態成員函數
-能夠經過類名直接訪問類的公有靜態成員函數
-能夠經過對象名訪問類的公有靜態成員函數
-定義靜態成員函數,直接使用static關鍵字修飾便可
生命週期