類的靜態資料成員和靜態成員函式

2021-09-26 23:49:18 字數 1440 閱讀 6767

一.什麼是類的靜態成員

靜態成員變數和全域性變數都儲存在全域性/靜態區,它們都是在程式編譯時建立,直到編譯結束才被收回.所以全域性變數和靜態成員變數的功能差不多,只是建立的方式不同,類的靜態成員建立在類中,全域性變數建立在程式開頭.

二.為什麼要用類的靜態成員而不用全域性變數

全域性變數在c中得心應手,而在c++中卻力不從心.全域性變數定義在程式開頭,一旦全域性變數多了,就會降低程式的可讀性,並且這樣定義變數會使程式變得很不安全.而

三.怎樣建立類的靜態成員

首先在human.h標頭檔案的類中宣告靜態資料成員,但是不能初始化.

static int humancount;
然後在human.cpp原始檔中初始化靜態成員,初始化時不需要寫static

int human::humancount = 0;
四.什麼是靜態成員函式靜態成員函式和靜態資料成員一樣,屬於類的,不是屬於某個具體物件的.

五.為什麼用靜態成員函式

靜態資料成員存在bug,此bug就是靜態資料成員函式可以被任何函式修改,並且必須要建立具體的物件才能呼叫該函式.首先安全性很低,其次必須要建立乙個不必用的物件才能用函式,浪費資源.

類的靜態資料成員和靜態成員函式就像故宮一樣,人人都能去,並且不屬於某個個人.呼叫靜態成員函式時只需要用類名呼叫即可,節省資源.但是類名不能直接呼叫靜態資料成員.

首先在human.h標頭檔案的類中宣告靜態成員函式.

static

intgethumancount()

;

然後在human.cpp原始檔中定義靜態成員函式,定義時不需要寫static

int human::gethumancount()
然後在main.cpp原始檔中呼叫靜態成員函式

void showmsg()
五.總結1)靜態資料成員:

所有的成員函式,都可以訪問靜態資料成員.

類和物件不能直接訪問普通的靜態資料成員(human::humancount非法)

2)靜態成員函式

類和物件都可以訪問靜態成員函式(human::gethumancount())

靜態成員函式無法訪問類的非靜態資料成員(如:靜態成員函式訪問age時,他就蒙了,不知道到底要訪問哪個age,因此這是非法的),靜態成員函式只能訪問屬於類的,不能訪問具體物件所有的屬性,因為靜態成員函式不知道是哪乙個的.

靜態成員函式只能訪問類的靜態成員函式.

類的靜態成員函式和靜態資料成員

一 基本知識 當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用...

類的靜態成員函式和靜態資料成員

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...

靜態資料成員和靜態成員函式

靜態資料成員屬於類 準確地說,是屬於類中乙個物件集合 而不像普通資料成員那樣屬於某一物件,因此可以使用 類名 訪問靜態的資料成員。例如上面例子中的 student count。靜態資料成員不能在類中進行初始化,因為在類中不給它分配記憶體空間,必須在 類外的其它地方為它提供定義。一般在 main 開始...