一。面向過程設計時的static
(1)靜態變量
靜態變量只初始化一次,未初始化的靜態變量會默認初始化爲0。
靜態全局變量:
靜態全局變量只在本文件可見,外部文件無法訪問
靜態局部變量:
而靜態局部變量只在定義的作用域內可見,但他們的生存週期都是整個程序運行時期。
(2)靜態函數
靜態函數主要是起到函數的隱藏作用,static修飾的函數只允許在當前文件中使用,在其他文件中無法找到該函數的地址,include也沒用
二。面向對象設計時的static
可以用類名:: 直接調用公有靜態數據成員和靜態成員函數
(1)靜態數據成員
不管這個類有多少實例,這個靜態數據成員只有這一個。
static修飾的數據成員不在棧上分配內存而在.data段分配內存,
static修飾的數據成員不能通過調用構造函數來進行初始化,因此static修飾的數據成員必須在類外進行定義,定義的時候可以不初始化。在cpp中定義,在頭文件中聲明。如果在頭文件中定義,當多個文件include這個頭文件時候,會重複定義。
(2)靜態成員函數
好處就是不需要對象來調用這個函數,直接用類名就行了
靜態成員函數可以在類內或類外定義,但必須在類內聲明;
static成員函數沒有this指針,所以不能直接引用非static數據成員或調用類的非static成員函數,只能調用類的static成員數據和static成員函數;
static成員不是任何對象的組成,不依賴對象的調用所以static成員方法不能被聲明爲const,因爲const只限定該類的對象;
static成員方法不能同時被聲明爲虛函數。