前言
今天,碼神像一個(gè)新車手一樣,嘗試著用模板來更新一下,不要建議哦,畢竟沒有放棄愛情的拓海也不是真正的車神,哈哈,發(fā)車了
一、this指針是個(gè)什么東東,重要嗎?
首先,我以碼神的名義起誓,this指針絕對(duì)重要,尤其是對(duì)于c++這個(gè)面向?qū)ο缶幊痰恼Z言來說!
有的碼手可能要說了:你說重要就重要?那我還說不重要呢?
這個(gè)么,空口無憑,我現(xiàn)在來舉一個(gè)例子:
我們知道對(duì)于一個(gè)類來說,要有很多工作要做,其中類的成員函數(shù)可以訪問類的數(shù)據(jù)(限定符只是限定于類外的一些操作,類內(nèi)的一切對(duì)于成員函數(shù)來說都是透明的),那么成員函數(shù)如何知道哪個(gè)對(duì)象的數(shù)據(jù)成員要被操作呢,這時(shí)c++中的this指針就應(yīng)用而生了
注:
每個(gè)對(duì)象都擁有一個(gè)指針:this指針,通過this指針來訪問自己的地址。this指針不是對(duì)象的一部分,故sizeof不會(huì)體現(xiàn)出this指針的大小,this指針的類型取決于使用this指針的成員函數(shù)類型以及對(duì)象類型。
二、案例理解
代碼如下(示例):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#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)骄幊趟枷?/code> } int main() { text01(); text02(); return 0; } |
主要的用途
當(dāng)形參和成員變量同名時(shí),可用this指針來區(qū)分
在類的非靜態(tài)成員函數(shù)中返回對(duì)象本身,可使用return *this
總結(jié) 通過上面我們知道在C++中成員變量和成員函數(shù)是分開存儲(chǔ)的每一個(gè)非靜態(tài)成員函數(shù)只會(huì)誕生一份函數(shù)實(shí)例,也就是說多個(gè)同類型的對(duì)象會(huì)共用一塊代碼c++通過提供特殊的對(duì)象指針,this指針,解決上述問題。this指針指向被調(diào)用的成員函數(shù)所屬的對(duì)象this指針是隱含每一個(gè)非靜態(tài)成員函數(shù)內(nèi)的一種指針this指針不需要定義,直接使用即可
最后:this指針指向被調(diào)用的成員函數(shù)所屬的對(duì)象
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注服務(wù)器之家的更多內(nèi)容!
原文鏈接:https://blog.csdn.net/weixin_45920495/article/details/119791355