靜態屬性和靜態方法2

2022-03-22 06:06:07 字數 1021 閱讀 3667

潛規則:

為什麼呢?

回顧下:this指標是類的乙個自動生成、自動隱藏的私有成員,它存在於類的非靜態成員函式中,指向被呼叫函式所在的物件的位址。當乙個物件被建立時,該物件的 this指標就自動指向物件資料的首位址。

我們從乙個比較有特色的例子來體會 this指標的工作原理:特色例子.txt。

#includeclass point

void movepoint( int a, int b)

void print() };

int main()

// 當物件point1呼叫movepoint(2,2)函式時,即將point1物件的位址傳遞給了this指標。

// movepoint函式的原型事實上應該是 void movepoint( point *this, int a, int b);

// 第乙個引數是指向該類物件的乙個指標,我們在定義成員函式時沒看見是因為這個引數在類中是隱含的。

// 這樣point1的位址傳遞給了this,所以在movepoint函式中便可以顯式的寫成:void movepoint(int a, int b)

// 即可以知道,point1呼叫該函式後,也就是point1的資料成員被呼叫並更新了值。

在任何乙個方法裡都可以使用 this 指標。從本質上講,c++中的物件其實是一種特殊的結構 -- 除了變數,還包含著一些函式的特殊結構。 在程式執行時,物件的屬性(變數)和方法(函式)都是儲存在記憶體裡,這就意味著它們各自都有與之相關聯的位址。 這些位址都可以通過指標來訪問,而 this指標毋庸置疑是儲存著物件本身的位址。

每當我們呼叫乙個方法的時候,this指標都會隨著你提供的輸入引數被秘密的傳遞給那個方法。 正是因為如此,我們才能在方法裡像使用乙個區域性變數那樣使用 this指標。 因為靜態方法不是屬於某個特定的物件,而是由全體物件共享的,這就意味著它們無法訪問 this指標。所以,我們才無法在靜態方法裡訪問非靜態的類成員。

另外需要注意:

php static靜態屬性和靜態方法

一 靜態屬性 靜態屬性不可以由物件通過 操作符來訪問。靜態屬性只能被初始化為文字或常量,不能使用表示式。所以可以把靜態屬性初始化為整數或陣列,但不能初始化為另乙個變數或函式返回值,也不能指向乙個物件。如何訪問靜態屬性呢?在類內部 類名 靜態屬性 或者 self 靜態屬性 在類外部 類名 靜態屬性 或...

靜態方法和靜態構造方法

如你所知,合理運用靜態欄位和靜態方法能夠提公升應用程式的效能,下面我們再複習一下類中的靜態成員 字段 方法 本文將涉及到靜態 構造方法等概念ok,我們先動手然後再剖析 新建乙個類test.cs public class test 用csc編譯一下 csc t library test.cs ok,讓...

類屬性,類方法和靜態方法

類屬性 針對類物件定義的屬性 使用賦值語句在class關鍵字下可以定義類屬性 類方法 針對類物件定義的方法 在類方法內部可以直接訪問類屬性或者呼叫其他的類方法 class toy object 使用賦值語句 記錄所有的玩具數量 count 0 def init self,name self.name...