C++ this

his 是 C++ 中的一個關(guān)鍵字摩梧,也是一個 const 指針,它指向當(dāng)前對象滑负,通過它可以訪問當(dāng)前對象的所有成員。

所謂當(dāng)前對象锡搜,是指正在使用的對象橙困。例如對于stu.show();,stu 就是當(dāng)前對象耕餐,this 就指向 stu凡傅。

下面是使用 this 的一個完整示例:

#include

usingnamespacestd;

classStudent{

public:

voidsetname(char*name);

voidsetage(intage);

voidsetscore(floatscore);

voidshow();

private:

char*name;

intage;

floatscore;

};

voidStudent::setname(char*name){

this->name=name;

}

voidStudent::setage(intage){

this->age=age;

}

voidStudent::setscore(floatscore){

this->score=score;

}

voidStudent::show(){

cout<name<<"的年齡是"<age<<",成績是"<score<

}

intmain(){

Student*pstu=newStudent;

pstu->setname("李華");

pstu->setage(16);

pstu->setscore(96.5);

pstu->show();

return0;

}

運行結(jié)果:

李華的年齡是16肠缔,成績是96.5

this 只能用在類的內(nèi)部夏跷,通過 this 可以訪問類的所有成員,包括 private明未、protected槽华、public 屬性的。

本例中成員函數(shù)的參數(shù)和成員變量重名趟妥,只能通過 this 區(qū)分猫态。以成員函數(shù)setname(char *name)為例,它的形參是name,和成員變量name重名亲雪,如果寫作name = name;這樣的語句勇凭,就是給形參name賦值,而不是給成員變量name賦值义辕。而寫作this -> name = name;后虾标,=左邊的name就是成員變量,右邊的name就是形參灌砖,一目了然璧函。

注意,this 是一個指針基显,要用->來訪問成員變量或成員函數(shù)蘸吓。

this 雖然用在類的內(nèi)部,但是只有在對象被創(chuàng)建以后才會給 this 賦值撩幽,并且這個賦值的過程是編譯器自動完成的美澳,不需要用戶干預(yù),用戶也不能顯式地給 this 賦值摸航。本例中,this 的值和 pstu 的值是相同的舅桩。

我們不妨來證明一下酱虎,給 Student 類添加一個成員函數(shù)printThis(),專門用來輸出 this 的值擂涛,如下所示:

voidStudent::printThis(){

cout<

}

然后在 main() 函數(shù)中創(chuàng)建對象并調(diào)用 printThis():

Student*pstu1=newStudent;

pstu1->printThis();

cout<

Student*pstu2=newStudent;

pstu2->printThis();

cout<

運行結(jié)果:

0x7b17d8

0x7b17d8

0x7b17f0

0x7b17f0

可以發(fā)現(xiàn)读串,this 確實指向了當(dāng)前對象,而且對于不同的對象撒妈,this 的值也不一樣恢暖。

幾點注意:

this 是 const 指針,它的值是不能被修改的狰右,一切企圖修改該指針的操作杰捂,如賦值、遞增棋蚌、遞減等都是不允許的嫁佳。

this 只能在成員函數(shù)內(nèi)部使用,用在其他地方?jīng)]有意義谷暮,也是非法的蒿往。

只有當(dāng)對象被創(chuàng)建后?this 才有意義,因此不能在 static 成員函數(shù)中使用(后續(xù)會講到 static 成員)湿弦。

this 到底是什么

this 實際上是成員函數(shù)的一個形參瓤漏,在調(diào)用成員函數(shù)時將對象的地址作為實參傳遞給 this。不過 this 這個形參是隱式的,它并不出現(xiàn)在代碼中蔬充,而是在編譯階段由編譯器默默地將它添加到參數(shù)列表中蝶俱。

this 作為隱式形參,本質(zhì)上是成員函數(shù)的局部變量娃惯,所以只能用在成員函數(shù)的內(nèi)部跷乐,并且只有在通過對象調(diào)用成員函數(shù)時才給 this 賦值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趾浅,一起剝皮案震驚了整個濱河市愕提,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌皿哨,老刑警劉巖浅侨,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異证膨,居然都是意外死亡如输,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門央勒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來不见,“玉大人,你說我怎么就攤上這事崔步∥人保” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵井濒,是天一觀的道長灶似。 經(jīng)常有香客問我,道長瑞你,這世上最難降的妖魔是什么酪惭? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮者甲,結(jié)果婚禮上春感,老公的妹妹穿的比我還像新娘。我一直安慰自己过牙,他們只是感情好甥厦,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寇钉,像睡著了一般刀疙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扫倡,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天谦秧,我揣著相機與錄音竟纳,去河邊找鬼肩袍。 笑死闪萄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迈喉。 我是一名探鬼主播集歇,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼桶略,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诲宇?” 一聲冷哼從身側(cè)響起际歼,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姑蓝,沒想到半個月后鹅心,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡纺荧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年旭愧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宙暇。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡输枯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出占贫,到底是詐尸還是另有隱情用押,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布靶剑,位于F島的核電站,受9級特大地震影響池充,放射性物質(zhì)發(fā)生泄漏桩引。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一收夸、第九天 我趴在偏房一處隱蔽的房頂上張望坑匠。 院中可真熱鬧,春花似錦卧惜、人聲如沸厘灼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽设凹。三九已至,卻和暖如春茅姜,著一層夾襖步出監(jiān)牢的瞬間闪朱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奋姿,地道東北人锄开。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像称诗,于是被迫代替她去往敵國和親萍悴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容