static之物件導向

2021-07-01 22:02:40 字數 1515 閱讀 8160

一、靜態資料成員子:

#includeusing namespace std;

class point

};int point::num = 0; //定義靜態資料成員

int main()

對於類的非靜態資料成員,每個類物件都有自己的拷貝。而對於靜態資料成員被當作是類的成員。就像上述例子中,雖然定義了4個物件,但是靜態資料成員在程式中只有乙份拷貝,由該型別的所有物件共享訪問。對於這個類的多個物件來說,靜態資料成員只分配一次記憶體,可以供所有的物件共用。因此,對於每個物件來說靜態資料成員的值都是相同的,可以更新。

上面說了靜態資料成員與非靜態資料成員的區別,那麼它的特點如下:

靜態資料成員的儲存位置是在全域性資料區。當它定義的時候要分配空間,所以它不能在類宣告中定義,要在類的外部定義並初始化,像上面的例子,若不初始化,則預設初始化為0;

靜態資料成員和普通的資料成員都要遵從public,protected,private的訪問規則;

對於它的訪問形式有兩種: 《類物件名》.《靜態資料成員名》或者《類型別名》::《靜態資料成員名》

我們定義靜態資料成員有幾個好處如下:

有些特點我們通過全域性變數也可以實現,那我們為什麼還選擇靜態資料成員:全域性變數破壞了封裝的原則,不符合我們物件導向程式的要求,而且靜態全域性成員沒有進入程式的全域性的名字空間,所以我們不會存在程式中與它全域性名字衝突的可能性。

二、靜態成員函式

靜態成員函式和靜態資料成員是類似的。它是為類的全部服務而不是為了某乙個類的具體物件服務的。它和

靜態資料成員一樣都是在類的內部實現的,屬於類定義的一部分。普通的成員函式都是具體屬於某個類的具體物件的,一般都隱含乙個this指標,通常情況下this是預設的。與普通成員函式相比,靜態成員函式不與任何乙個物件相聯絡,所以它不具有this指標。從這個方面說,它無法訪問屬於類物件的非靜態資料成員,也無法訪問非靜態成員函式,它只能呼叫其他的靜態成員函式。下面看乙個靜態成員函式的例子:

#includeusing namespace std;

class point

static void showsumofpoint(); //宣告靜態成員函式

};int point::num = 0; //定義靜態成員函式

void point::showsumofpoint() //定義靜態成員函式

int main()

靜態成員函式有以下幾點需要注意的:

php的學習筆記之物件導向(六)static

有這樣乙個場景 我們把某班的所有同學都設為物件,他們都有乙個班長屬性,而且該班的班長為 k 如果班長換成了 m 那麼要把學生的班長屬性都改為 m 嗎?這是我們應該用到static關鍵字。class students kitt new students echo last monitor is stu...

java之物件導向

類是用於描述同一型別的物件的乙個抽象。類中定義了這一類物件所具有的靜態和動態屬性 靜態屬性 成員變數 動態屬性 方法 1 類可以看成是一類物件的模板,物件可以看成該類的乙個具體例項 2 首先必須定義類才能有物件 說到類,就不得不說構造其構造方法了 在new乙個物件是,呼叫的就是類中的構造方法 列如p...

Lua Lua之物件導向

萬物皆值 函式也是一種值 正式這個特點我們可以使用 table 陣列 構建乙個包含有屬性和方法的 table,這個table 就可以被我們當做物件來使用 tbl1 tbl2 setmetatable tbl2,print tbl2.a 輸出1metastable可以用來改變table的行為,如 in...