關於C++中的this指針,建議大家看看這篇文章,《C++中的this指針》,供參考。
this指針是一個特殊的指針,當類的某個非靜態的成員函數在執行時,就會存在this指針。它指向類的一個對象,且這個對象的某個成員函數正在被調用。
this指針的名字始終是this,而且總是作為隱含參數傳遞給每一個被聲明的成員函數,例如:
實際編程時函數的聲明不需要包含這個參數。
當程序中調用某個對象的成員函數時,編譯器會把該對象的地址加入到參數列表中,感覺上就好象函數采用了上面所示的聲明,並且是用如下方式來調用的:
靜態成員函數不存在this指針。
當調用某個對象的成員函數時,編譯器把對象的地址傳遞給this指針,然後再調用該函數。因此,成員函數你對任何成員的調用實際上都隱式地使用了this指針。
1.以this指針作為返回值
使this指針可以允許成員函數返回調用對象給調用者。前面的程序中重載賦值運算符沒有返回值,因此不能用如下的形式對字符串進行賦值:
為了使重載的類賦值機制也能這樣方便,必須讓賦值函數返回賦值的結果,在這裡就是目標對象。當賦值函數執行時,其返回值也恰好是this指針所指的內容。下面的程序對前面那個程序進行了修改,讓重載賦值運算符返回了一個Date對象的引用。
2.在鏈表中使用this指針
在應用程序中,如果數據結構裡有指向自身類型的成員,那麼使用this指針會提供更多的方便。下面的程序中建立了一個類ListEntry的鏈表。
程序運行時,會提示輸入一串姓名,當輸入完畢後,鍵入\"end\",然後程序會逆序顯示剛才輸入的所有姓名。
程中ListEntry類含有一個字符串和一個指向前一個表項的指針。構造函數從對中獲取內存分配給字符串,並把字符串的內容拷貝到內存,然後置鏈接指針為NULL。析構函數將釋放字符串所占用的內存。
成員函數PrevEntry()返回指向鏈表前一個表項的指針。另一個成員函數顯示當前的表項內容。
成員函數AddEntry(),它把this指針拷貝給參數的preventry指針,即把當前表項的地址賦值給下一個表項的鏈接指針,從而構造了一個鏈表。它並沒有改變調用它的listEntry對象的內容,只是把該對象的地址賦給函數的參數所引用的那個ListEntry對象的preventry指針,盡管該函數不會修改對象的數據,但它並不是常量型。這是因為,它拷貝對象的地址this指針的內容給一個非長常量對象,而編譯器回認為這個非常量對象就有可能通過拷貝得到的地址去修改當前對象的數據,因此AddEntry()函數在聲明時不需要用const。
希望通過以上內容的介紹,能夠給你帶來幫助。