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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C++的this指针【定义、用法、本质、特点】

發布時間:2024/1/1 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++的this指针【定义、用法、本质、特点】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、this指針的定義及用法

我們知道在C++中成員變量和成員函數是分開存儲的,每一個非靜態成員函數只會誕生一份函數實例,也就是說多個同類型的對象會共用一塊代碼。

那么問題是:這一塊代碼是如何區分哪個對象調用自己的呢?

C++通過提供特殊的對象指針,this指針,解決上述問題。this指針指向被調用的成員函數所屬的對象

this指針是隱含每一個非靜態成員函數內的一種指針,this指針不需要定義,直接使用即可。

this指針的用途:

  • 當形參和成員變量同名時,可用this指針來區分
  • 在類的非靜態成員函數中返回對象本身,可使用return *this
#include<iostream> using namespace std;class Person { public:Person(int age){//1、當形參和成員變量同名時,可用this指針來區分this->age = age;}Person& PersonAddPerson(Person p){this->age += p.age;//返回對象本身return *this;}int age; };int main() {Person p1(10);cout << "p1.age = " << p1.age << endl;Person p2(20);p2.PersonAddPerson(p1).PersonAddPerson(p1); //20+10+10=40 cout << "p2.age = " << p2.age << endl;return 0; }

二、this指針的本質--指針常量

this指針的本質是一個指針常量:const Type* const pointer;?

他儲存了調用他的對象的地址,并且不可被修改。這樣成員函數才知道自己修改的成員變量是哪個對象的。

例如:調用date.SetMonth(9) <===> SetMonth(&date, 9),this指針幫助完成了這一轉換,使得this指針指向了調用對象data。

?

三、this指針的特點

1.只能在成員函數中使用,在全局函數、靜態成員函數中都不能使用 this 。

(this始終指向當前對象,靜態成員函數屬于類)

2. this 指針是在成員函數的開始前構造,并在成員函數的結束后清除 。

(和函數的其他參數生命周期一樣)

3. this 指針會因編譯器不同而有不同的存儲位置,可能是棧、寄存器或全局變量 。

(編譯器在生成程序時加入了獲取對象首地址的相關代碼并把獲取的首地址存放在了寄存器中)

4.?關于this指針的一個經典回答:

當你進入一個房子后,你可以看見桌子、椅子、地板等,但是房子的全貌 ,你看不到了。?  
對于一個對象(也就是類的實例)來說,你可以看到它的成員函數、成員變量,但是看不到對象本身了。
所以有了this指針,它時時刻刻指向你這個對象本身。

?

?

總結

以上是生活随笔為你收集整理的C++的this指针【定义、用法、本质、特点】的全部內容,希望文章能夠幫你解決所遇到的問題。

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