this指針
一個類當中,有一個很隱密的特殊指針,它就是this指針!
為什麼說它特殊?因為只要定義一個類,系統就會預先定義個名字叫做this名且指向目前物件的指標。雖然我們看不到但卻可以使用它。
例如,我們來看一個時鐘類別的一個成員函數,用來設定時間傳值的程式碼:
intClock::SetTime(inth,intm,ints){H=h;M=m;S=s;}
可以看到Clock類別本身的成員變數為H、M、S,要用外部傳來的值給它們三個賦值,為了區別它們,我們把形參定義成小寫。那如果我們知道了this的存在,就可以這樣寫:
intClock::SetTime(inth,intm,ints){this->H=h;this->M=m;this->S=s;}//也可以寫成:intClock::SetTime(inth,intm,ints ){(*this).H=h;(*this).M=m;(*this).S=s;}
可以看到,以上兩種寫法用到了物件中的隱藏的this指針,可以明確是本類別中的成員,從而明顯的區別本對象與外部變數。實際上,當一個物件呼叫其成員函數的時候,即便程式中有多個該類別的對象,但成員函數的程式碼也僅有一份,所以為了區分它們是哪個物件呼叫的成員函數,編譯器也是轉化成this->成員函數這種形式來使用的。