如果類中需要統計多少個物件存在,c++有了類的靜態成員變數和靜態成員函式。
* 靜態成員屬於整個類所有,不需要依賴任何物件
* 可以通過類名直接訪問public靜態成員
* 可以通過物件名訪問public靜態成員
* 靜態成員函式可以直接訪問靜態成員變數
靜態成員變數的定義:
static 關鍵字修飾
靜態成員變數不依賴任何物件,需要在類外單獨分配空間。
type classnmae::varname;
#include class test
static void setvalue(int v)
void print() };
int test::i;
int main()
類的靜態成員
從命名空間的角度
類的靜態成員只是類這個命名空間中的全域性變數和全域性函式。
不同之處是,類可以對靜態成員進行訪問許可權的限制,而命名空間不可以的。
從面相物件的角度
類的靜態成員函式屬於類概念本身。
類的所有物件共享相同的靜態成員。
通過乙個簡單示例看靜態成員函式和普通成員函式的區別:
#include struct c1
;class c2
;/// class和struct,乙個私有,乙個公有,沒有區別
c++類中的成員函式和成員變數是分開儲存的
* 成員變數
——普通成員變數:儲存於物件中,與struct變數一樣,有相同的記憶體布局和位元組對齊方式。
* 成員函式
——儲存於**段中
靜態成員與普通成員函式的區別
* 靜態成員函式不包含指向具體物件的指標
* 普通成員函式包含乙個指向具體物件的this指標。
小結:
c++類中可以包含屬於類的靜態成員。
靜態成員變數在全域性資料區分配空間。
靜態成員函式不包含隱藏的this指標
通過類名可以直接訪問靜態成員。
通過物件名可以訪問靜態成員,所有的物件可以共享同一類靜態成員。
類靜態成員和類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...
C 類靜態成員與類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...
C 類靜態成員與類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...