類的靜態成員
通過物件名能夠訪問public成員變數
每個物件都可以有只屬於自己的成員變數
成員變數不能在物件之間共享
保證程式的安全性,並隨時可以獲取物件的數目
問題:使用普通的成員變數可行嗎?
a:明顯不行
在c++中可以定義靜態成員變數和靜態成員函式
靜態成員屬於整個類所有,不需要依賴任何物件
可以通過類名直接訪問public靜態成員
可以通過物件名訪問public靜態成員
靜態成員函式可以直接訪問靜態成員變數
靜態成員變數的定義:
在定義時直接通過static關鍵字修飾
靜態成員變數不依賴於任何物件,需要在類外單獨分配空間
語法規則:type classname::varname;
靜態成員函式的定義
在定義時直接通過static關鍵字修飾
其餘部分與普通成員函式定義相同
#include class test
static void seti(int i)
void print()
};int test::ci = 0; //靜態成員變數初始化
從命名空間的角度
類的靜態成員只是類這個命名空間中的全域性變數和全域性函式
不同之處只是,類可以對靜態成員進行訪問許可權的限制,而命名空間不行
從物件導向的角度
類的靜態成員屬於類概念本身
類的所有物件共享相同的靜態成員
新的需求:統計類在程式執行期間有多少個物件同時存在
#include class test
test()
~test()
};int test::ccount; //未初始化的static成員變數為0
分析:static成員變數比全域性變數更加優雅!!!
c++類物件中的成員變數和成員函式是分開儲存的
成員變數
普通成員變數:儲存於物件中,與struct變數有相同的記憶體布局和位元組對齊方式
靜態成員變數:儲存於全域性資料區中
成員函式
儲存於**段中
c++中的class從物件導向理論出發,將變數和函式集中定義在一起,用於描述現實世界中的類
從計算機的角度,程式依然由資料段和**段構成
c++編譯器如何完成物件導向理論到電腦程式的轉化?
a:c++編譯器的內部處理:了解即可。
靜態成員函式與普通成員函式的區別
靜態成員函式不包含指向具體物件的指標
普通成員函式包含乙個指向具體物件的指標
#include class test
void print()
//static void print()
//};int test::c;
int main()
小結:
c++類中可以包含屬於類概念的靜態成員
靜態成員變數在全域性資料區分配空間
靜態成員函式不包含隱藏的this指標
通過類名可以直接訪問靜態成員
通過物件名可以訪問靜態成員,所有的物件可以共享同乙個類的靜態成員
類靜態成員和類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...
類的靜態成員
類的靜態成員存在於任何物件之外,物件中不包含任何與靜態資料成員有關的資料。class account 對於account的每乙個物件豆漿包含owner和amount兩個資料成員,而對於靜態成員interestrate只有乙個,且被所有的物件共享。double r r account rate 2.使...
類的靜態成員
1,static靜態成員,靜態成員 變數 or 函式 可以是public or private,訪問許可權與普通 非static 成員一樣,受到限定符限制 2,靜態成員 變數 or 函式 不與任何物件繫結在一起,而是被所有物件共享 特別是靜態成員函式,它不包含this 指標引數 3.public靜態...