EasyC++,This指針
大家好,我是梁唐。
this指針
還是Stock股票這個(gè)類,假設(shè)我們要實(shí)現(xiàn)一個(gè)方法,比較一下當(dāng)前股票和傳入的股票, 返回價(jià)格高的那個(gè)股票。在我們實(shí)現(xiàn)的時(shí)候,會(huì)遇到一點(diǎn)問(wèn)題。
- const Stock & Stock::topVal(const Stock &s) const {
- if (s.total_val > total_val) {
- return s;
- }else {
- return ????;
- }
- }
這段代碼當(dāng)中有一些問(wèn)題,我們一個(gè)一個(gè)來(lái)說(shuō)。
首先說(shuō)函數(shù)簽名,前面都沒(méi)有問(wèn)題,問(wèn)題出現(xiàn)在簽名末尾的const。這是我們第一次在函數(shù)的末尾看到const,這個(gè)用法只能用在類或結(jié)構(gòu)體的成員函數(shù)中,而不能用在普通函數(shù)里。
它表示這個(gè)函數(shù)不會(huì)修改任何成員變量的值,末尾加上const的函數(shù)稱為常量成員函數(shù)。
常量函數(shù)有一些特殊的性質(zhì):
- 能被任何函數(shù)調(diào)用,只能調(diào)用常量函數(shù)
- 能被任何對(duì)象調(diào)用,但const對(duì)象只能調(diào)用const函數(shù)
性質(zhì)不是非常復(fù)雜,但有些像是繞口令,需要從const常量的性質(zhì)角度出發(fā)理解一下。
代碼當(dāng)中第二個(gè)問(wèn)題就是一堆問(wèn)號(hào)的地方,這里我們想要return當(dāng)前對(duì)象,但是我們不知道如何表示。為了解決這個(gè)問(wèn)題,C++當(dāng)中創(chuàng)建了一個(gè)特殊的指針叫做this,它用來(lái)指向調(diào)用成員函數(shù)的對(duì)象,也就是當(dāng)前對(duì)象。
所以有了this之后,這段代碼可以寫成:
- const Stock & Stock::topVal(const Stock &s) const {
- if (s.total_val > total_val) {
- return s;
- }else {
- return *this
- }
- }
另外,this指針也可以拿來(lái)訪問(wèn)當(dāng)前對(duì)象當(dāng)中的成員變量,比如我們想要訪問(wèn)當(dāng)前的total_val,可以寫成this->total_val,我們直接用total_val本質(zhì)上是一樣的,是編譯器替我們做了優(yōu)化。