帶你了解C++this指針的用法及其深究
前言
今天,碼神像一個(gè)新車手一樣,嘗試著用模板來(lái)更新一下,不要建議哦,畢竟沒(méi)有放棄愛(ài)情的拓海也不是真正的車神,哈哈,發(fā)車了
一、this指針是個(gè)什么東東,重要嗎?
首先,我以碼神的名義起誓,this指針絕對(duì)重要,尤其是對(duì)于c++這個(gè)面向?qū)ο缶幊痰恼Z(yǔ)言來(lái)說(shuō)!
有的碼手可能要說(shuō)了:你說(shuō)重要就重要?那我還說(shuō)不重要呢?
這個(gè)么,空口無(wú)憑,我現(xiàn)在來(lái)舉一個(gè)例子:
我們知道對(duì)于一個(gè)類來(lái)說(shuō),要有很多工作要做,其中類的成員函數(shù)可以訪問(wèn)類的數(shù)據(jù)(限定符只是限定于類外的一些操作,類內(nèi)的一切對(duì)于成員函數(shù)來(lái)說(shuō)都是透明的),那么成員函數(shù)如何知道哪個(gè)對(duì)象的數(shù)據(jù)成員要被操作呢,這時(shí)c++中的this指針就應(yīng)用而生了
注:
每個(gè)對(duì)象都擁有一個(gè)指針:this指針,通過(guò)this指針來(lái)訪問(wèn)自己的地址。this指針不是對(duì)象的一部分,故sizeof不會(huì)體現(xiàn)出this指針的大小,this指針的類型取決于使用this指針的成員函數(shù)類型以及對(duì)象類型。
二、案例理解
代碼如下(示例):
#include<iostream> using namespace std; class Person { public: Person(int age) { this->age=age; //this指針指向被調(diào)用的成員函數(shù)所屬的對(duì)象 } int age; //int m_Age; void PersonAddAge(Person &p) { this->age += p.age; //this指向篇的指針,而*this指向的是篇這個(gè)本體 return *this; } } //解決名稱沖突 void text01() { Person p1(18); cout<<"p1age:"<<p1.age<<endl; } //返回對(duì)象本身用*this void text02() { Person p1(10); Person p2(10); p2.PersonAddAge(p1); cout<<"p2的age:"<<p2.age<<endl;//20 p2.PersonAddAge(p1).PersonAddAge(p1); cout<<"p2的age:"<<p2.age<<endl;//30 //鏈?zhǔn)骄幊趟枷? } int main() { text01(); text02(); return 0; }
主要的用途
當(dāng)形參和成員變量同名時(shí),可用this指針來(lái)區(qū)分
在類的非靜態(tài)成員函數(shù)中返回對(duì)象本身,可使用return *this
總結(jié) 通過(guò)上面我們知道在C++中成員變量和成員函數(shù)是分開(kāi)存儲(chǔ)的每一個(gè)非靜態(tài)成員函數(shù)只會(huì)誕生一份函數(shù)實(shí)例,也就是說(shuō)多個(gè)同類型的對(duì)象會(huì)共用一塊代碼c++通過(guò)提供特殊的對(duì)象指針,this指針,解決上述問(wèn)題。this指針指向被調(diào)用的成員函數(shù)所屬的對(duì)象this指針是隱含每一個(gè)非靜態(tài)成員函數(shù)內(nèi)的一種指針this指針不需要定義,直接使用即可
最后:this指針指向被調(diào)用的成員函數(shù)所屬的對(duì)象
總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)數(shù)字雨效果
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)數(shù)字雨效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02C++實(shí)踐排序函數(shù)模板項(xiàng)目的參考方法
今天小編就為大家分享一篇關(guān)于C++實(shí)踐排序函數(shù)模板項(xiàng)目的參考方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02C語(yǔ)言基礎(chǔ)之格式化輸出控制長(zhǎng)度
這篇文章主要介紹了C語(yǔ)言基礎(chǔ)之格式化輸出控制長(zhǎng)度的相關(guān)資料,需要的朋友可以參考下2017-04-04Qt編寫地圖之實(shí)現(xiàn)跨平臺(tái)功能
這篇文章主要介紹了如何利用Qt編寫地圖應(yīng)用時(shí)實(shí)現(xiàn)跨平臺(tái)功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-02-02C語(yǔ)言實(shí)現(xiàn)ATM自動(dòng)取款機(jī)系統(tǒng)的示例代碼
ATM自動(dòng)取款機(jī)系統(tǒng)是銀行業(yè)務(wù)流程中十分重要且必備的環(huán)節(jié)之一,在銀行業(yè)務(wù)流程中起著承上啟下的作用。本文將用C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的ATM自動(dòng)取款機(jī)系統(tǒng),需要的可以參考一下2022-08-08五個(gè)經(jīng)典鏈表OJ題帶你進(jìn)階C++鏈表篇
做題之前呢,小編想提醒下大家,要三思而后行,不要一上來(lái)就嘎嘎敲代碼,要先學(xué)會(huì)自己畫圖分析,把自己的思路捋清楚,不要到時(shí)候?qū)懘a五分鐘,調(diào)試兩小時(shí),記住,編程思路很重要2022-03-03