日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

c++(16)this指针详解

發(fā)布時(shí)間:2024/1/1 86 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++(16)this指针详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在c++類(lèi)的靜態(tài)成員變量和靜態(tài)成員函數(shù)中,多次涉及到了this指針。下面注重介紹一下

前面講static成員變量占用的時(shí)候提到,如果sizeof類(lèi)的大小,是不會(huì)計(jì)算static成員變量的,同樣的也不會(huì)計(jì)算成員函數(shù),

換句話(huà)說(shuō),其實(shí)成員函數(shù)是在類(lèi)外的。那么當(dāng)我們創(chuàng)建完對(duì)象,使用對(duì)象的成員函數(shù),它是怎么知道我們?cè)L問(wèn)的是哪個(gè)對(duì)象的成員變量的?

我們知道編譯器在編譯一個(gè)普通成員函數(shù)時(shí),會(huì)隱式地增加一個(gè)形參 this,并把當(dāng)前對(duì)象的地址賦值給 this,所以普通成員函數(shù)能在創(chuàng)建對(duì)象后通過(guò)對(duì)象來(lái)調(diào)用并訪(fǎng)問(wèn)該對(duì)象的成員變量。

?在創(chuàng)建對(duì)象之后,調(diào)用對(duì)象的成員函數(shù)時(shí),編譯器會(huì)將我們左邊的代碼翻譯成右邊的樣子。

關(guān)于this指針,有以下幾點(diǎn)總結(jié):

1)this指針指向當(dāng)前對(duì)象,可以訪(fǎng)問(wèn)當(dāng)前對(duì)象的所有成員變量。包括private、protected、public。

2)this指針是const指針,一切企圖修改該指針的操作,如賦值(改變指向)、增減都是不允許的!

3)this指針只有在成員函數(shù)中才有定義。因此,在創(chuàng)建一個(gè)對(duì)象后,也不能通過(guò)對(duì)象使用this指針。所以,我們也無(wú)法知道一個(gè)對(duì)象的this指針的位置(只有在成員函數(shù)里才有this指針的位置)。當(dāng)然,在成員函數(shù)里,你是可以知道this指針的位置的(可以&this獲得),也可以直接使用的。

4)只有創(chuàng)建對(duì)象后,this指針才有意義。

5)static靜態(tài)成員函數(shù)不能使用this指針。原因靜態(tài)成員函數(shù)屬于類(lèi),而不屬于某個(gè)對(duì)象,所以static靜態(tài)成員函數(shù)壓根就沒(méi)有this指針

6)this在成員函數(shù)的開(kāi)始執(zhí)行前構(gòu)造的,在成員函數(shù)的執(zhí)行結(jié)束后清除。至于如何清除的,由編譯器實(shí)現(xiàn),程序員不關(guān)心。this是通過(guò)函數(shù)參數(shù)的首參數(shù)來(lái)傳遞的。

拓展1:如果在堆上創(chuàng)建對(duì)線(xiàn),student *pstu = new student;這里的this的值和pstu的值是相同的。

#include <iostream> #include <cstring> using namespace std;class AA { public:AA(int a){m_a = a;}~AA(){}void PinrtThis(){printf("this = 0x%x\n", this);}private:int m_a; };int main(void) { AA *pa = new AA(10);pa->PinrtThis();printf("pa = 0x%x\n", pa);return 0; }

拓展2:如何返回對(duì)象本身

#include <iostream> #include <cstring> using namespace std;class AA { public:AA(int a){m_a = a;}AA& returnAA(){return *this;}void Pinrt(){printf("m_a = %d\n", m_a);}private:int m_a; };int main(void) { AA a(10);AA b = a.returnAA();b.Pinrt();return 0; }

this是一個(gè)指針指向?qū)ο?#xff0c;如果要在類(lèi)的成員函數(shù)中返回對(duì)象本身,需要對(duì)this取值,也就是*this?

總結(jié)

以上是生活随笔為你收集整理的c++(16)this指针详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。