1 this 指針
1)類的成員函數(shù)包括構(gòu)造函數(shù),都有一個隱藏的該類類型的指針,名字為 this。
a. 對于普通成員函數(shù),this 指針指向調(diào)用該函數(shù)的對象。
b. 對于構(gòu)造函數(shù),this 指針指向正在被構(gòu)造的對象。
2)在成員函數(shù)或構(gòu)造函數(shù)直接訪問成員變量實際都是通過 this 指針完成的,一般 this 可以省略不寫,也可以顯示寫出來。
3)需要顯示使用 this 指針的場景
a. 區(qū)分作用域
b. 從成員函數(shù)中返回調(diào)用對象的自身 (自引用)
class A{ A& fun(void){ ... return *this; } } int main(){ A a; a.func(); }
c. 從類的內(nèi)部銷毀對象自身(對象自毀)
class A{ void destory(void){ ... delete this; //對象自毀 } } int main(){ A* pa = new A; //delete pa; }
d. 作為函數(shù)實參,把一個對象傳遞給另一個對象,實現(xiàn)對象的交互。
2 常函數(shù)
1)在一個普通的成員函數(shù)不包括構(gòu)造函數(shù)后面加上 const 關(guān)鍵字,這個成員函數(shù)就稱為常函數(shù)。
返回類型 函數(shù)名 (形參表) const {函數(shù)體}
2)const 實際修飾的就是成員函數(shù)里面隱藏參數(shù) this 指針,常函數(shù)中的 this 是一個常指針,不能在常函數(shù)中修改成員變量的值。
3)一般如果一個函數(shù)不需要修改成員變量的值,就可以定義為常函數(shù),防止意外修改成員變量。
4)被 mutable 關(guān)鍵字修飾的成員變量可以在常函數(shù)中修改。
5)非常對象既可以調(diào)用非常函數(shù)也可以調(diào)用常函數(shù),但常對象只能調(diào)用常函數(shù),不能調(diào)用非常函數(shù)。
6)函數(shù)名和形參表相同的成員函數(shù),其常版本和非常版本可以構(gòu)成有效的重載,常對象調(diào)用常版本,非常對象調(diào)用非常版本。