靜態成員與例項成員

2021-09-07 21:37:08 字數 1051 閱讀 3052

1、類的成員分為靜態成員和例項成員。為什麼設計出靜態成員和例項成員?

靜態成員對類以及類的所有例項有意義,例項成員對每個例項有意義。考慮,person類,有個age欄位和maxage欄位。每個person例項都有自己的age,但所有的person例項都有相同的maxage(最大年齡極限),因此,maxage只需要乙份就好了,大家共享。有兩個好處:節約記憶體和保持一致。

2、成員分為欄位和方法,首先考慮字段:

靜態字段:只有一塊記憶體。

例項字段:每個例項都有專屬於自己的一塊記憶體。

3、對於方法:

無論靜態方法和例項方法,只有一塊記憶體。那麼問題來了,在成員方法中會使用例項的字段,怎麼區分是哪個例項的字段呢?

4、例項成員方法的實現細節:

考慮person的getage方法,int person::getage(),實際上可以認為,該方法在編譯後,變成int getage(person* const this)這種形式。也就是說,成員方法編譯後變成普通方法,在這個普通方法中,使用this指標。呼叫方法的時候,使用.或者->呼叫方法,可認為.或者->前面的這個東西(方法的擁有者),就是普通方法int getage(person* const this)的實參。

5、在考慮一下,為什麼int getage(person* const this)中this指標限定為const指標?

考慮,p1.getage()中,把this指標指向其他物件,那就不是訪問p1的字段了。這顯然與程式設計師意圖不一致。呼叫p1的成員方法,就是訪問p1的字段(讀取或者寫入)。

6、這樣,就很好理解const成員方法了。

int person::getage() const 轉化為 int getage(const person* const this)

7、const物件只能呼叫const成員方法,不能呼叫non-const成員方法,但是non-const物件可以呼叫const成員方法,也可以呼叫non-const成員方法。為什麼?

可以這樣認為:b是a 的別名(引用或者指標),b可以縮小a的能力,但是不能放大a 的能力。

8、static方法中,沒有this指標,所有不能使用例項字段。

靜態成員與例項成員

靜態成員與例項成員 成員 屬性和方法。例項 由建構函式建立出來的物件。靜態成員 和建構函式相關的屬性和方法。例項成員 由建構函式建立出來的物件的屬性和方法。靜態成員與建構函式有關,例項成員與例項有關。靜態成員和例項成員一般情況下是不能直接相互訪問的,即 例項 物件 是無法直接訪問靜態成員的 反之也是...

靜態成員與例項成員

1 從語義上講,靜態成員對類有意義,類和所有例項共享。例項成員對例項有意義,每個例項都有專屬於自己的。如何理解?舉例來說,person類的age應該是例項成員,每個person例項都有自己的age,而maxage 年齡的最大極限,比如說200歲 應該是靜態成員,因為maxage對於人類 包括所有人 ...

例項成員和靜態成員

什麼是成員 建構函式中的屬性或方法稱為成員 建構函式中的成員分類 a 例項成員 在建構函式內部通過this關鍵字設定的屬性或方法 function fn uname b 例項成員如何訪問 通過例項物件點的方法訪問 通過建構函式建立的物件叫例項物件 let zs new fn 張三 console.l...