日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++(16)this指针详解

發布時間:2024/1/1 c/c++ 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++(16)this指针详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在c++類的靜態成員變量和靜態成員函數中,多次涉及到了this指針。下面注重介紹一下

前面講static成員變量占用的時候提到,如果sizeof類的大小,是不會計算static成員變量的,同樣的也不會計算成員函數,

換句話說,其實成員函數是在類外的。那么當我們創建完對象,使用對象的成員函數,它是怎么知道我們訪問的是哪個對象的成員變量的?

我們知道編譯器在編譯一個普通成員函數時,會隱式地增加一個形參 this,并把當前對象的地址賦值給 this,所以普通成員函數能在創建對象后通過對象來調用并訪問該對象的成員變量。

?在創建對象之后,調用對象的成員函數時,編譯器會將我們左邊的代碼翻譯成右邊的樣子。

關于this指針,有以下幾點總結:

1)this指針指向當前對象,可以訪問當前對象的所有成員變量。包括private、protected、public。

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

3)this指針只有在成員函數中才有定義。因此,在創建一個對象后,也不能通過對象使用this指針。所以,我們也無法知道一個對象的this指針的位置(只有在成員函數里才有this指針的位置)。當然,在成員函數里,你是可以知道this指針的位置的(可以&this獲得),也可以直接使用的。

4)只有創建對象后,this指針才有意義。

5)static靜態成員函數不能使用this指針。原因靜態成員函數屬于類,而不屬于某個對象,所以static靜態成員函數壓根就沒有this指針

6)this在成員函數的開始執行前構造的,在成員函數的執行結束后清除。至于如何清除的,由編譯器實現,程序員不關心。this是通過函數參數的首參數來傳遞的。

拓展1:如果在堆上創建對線,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:如何返回對象本身

#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是一個指針指向對象,如果要在類的成員函數中返回對象本身,需要對this取值,也就是*this?

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。