類的靜態成員

2021-10-03 02:01:24 字數 2151 閱讀 3290

類的靜態成員

通過物件名能夠訪問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靜態...