潛規則:
為什麼呢?
回顧下:this指標是類的乙個自動生成、自動隱藏的私有成員,它存在於類的非靜態成員函式中,指向被呼叫函式所在的物件的位址。當乙個物件被建立時,該物件的 this指標就自動指向物件資料的首位址。
我們從乙個比較有特色的例子來體會 this指標的工作原理:特色例子.txt。
#includeclass pointvoid 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...