C++ this指针显式使用
this指針顯式使用
?????? 上面我們介紹了this指針對(duì)象的定義。知道在對(duì)象的成員函數(shù)中,是通過(guò)this指針對(duì)象來(lái)訪問(wèn)成員變量和成員函數(shù)。
默認(rèn)情況下,this指針是隱式使用的,它是作為參數(shù)被傳遞給成員函數(shù)的。例如,有student類(lèi)的成員函數(shù)print()的定義如下:
??? void print(){
??????? cout << "name = " << name << endl;
??????? cout << "addr = " << addr << endl;
??????? cout << "number = " << number << endl;
??? }
C++編譯器把它處理成:
??? void print(student* this){
??????? cout << "name = " << this->name << endl;
??????? cout << "addr = " << this->addr << endl;
??????? cout << "number = " << this->number << endl;
??? }
?????? 就是在成員函數(shù)的形參列表中增加一個(gè) this 指針,在調(diào)用成員函數(shù) stud3.print() 時(shí),實(shí)際上是用以下方式調(diào)用:
stud3.print(&stud3);
此時(shí),將stud3對(duì)象的地址傳給形參this指針,然后,按this的指向去引用各成員。
?????? 需要說(shuō)明:這些都是編譯系統(tǒng)自動(dòng)實(shí)現(xiàn)的,開(kāi)發(fā)者不必在形參中增加this指針,也不必將對(duì)象stud3的地址傳給this指針。上面是分析過(guò)程,只是為了使讀者理解this指針的作用和實(shí)現(xiàn)的機(jī)理。
?????? 那么,this指針對(duì)象傳遞到對(duì)象的成員函數(shù)之后,可以顯式使用this指針對(duì)象。可以通過(guò)this指針對(duì)象訪問(wèn)變量和函數(shù)。例如:
??? void print(){
??????? cout << "name = " << this->name << endl;
??????? cout << "addr = " << this->addr << endl;
??????? cout << "number = " << this->number << endl;
??? }
?????? 此時(shí),通過(guò)this指針來(lái)訪問(wèn)name成員變量。
?????? 我們知道this指針是一個(gè)指針,那么,可以通過(guò)指針降級(jí)運(yùn)算符*來(lái)操作this指針,還原成它所指向的對(duì)象。例如 *this 就表示 this 指針?biāo)赶虻膶?duì)象。如下是一個(gè)測(cè)試?yán)?#xff1a;
?????? 程序運(yùn)行結(jié)果如下:
?????? 可以看到,在print()函數(shù)中,可以顯式通過(guò)this指針訪問(wèn)它所指向的對(duì)象。也可以使用指針降級(jí)運(yùn)算符*來(lái)操作,把它還原為this指針?biāo)赶虻膶?duì)象。
?????? 所以,執(zhí)行 stud1.print() 函數(shù)調(diào)用,相當(dāng)于:
stud1.print(&stud1);
?????? 此時(shí),在print()函數(shù)中的this指針,就是指向stud1對(duì)象。*this就是表示stud1對(duì)象。
?????? 注意,使用指針降級(jí)運(yùn)算符*來(lái)操作this指針,訪問(wèn)this所指向?qū)ο蟮某蓡T函數(shù)或成員變量時(shí),*this 兩側(cè)的括號(hào)不能省略,不能寫(xiě)成 *this.name。因?yàn)?#xff0c;成員運(yùn)算符“.”的優(yōu)先級(jí)高于運(yùn)算符“*”,因此,*this. name就相當(dāng)于 *(this. name),而 this. name是不合法的,編譯出錯(cuò)。
韋凱峰 Linux C/C++ 程序設(shè)計(jì)教程,Linux 系統(tǒng)編程,Openwrt 系統(tǒng)開(kāi)發(fā),微信:13926572996,QQ:1523520001,博客:www.mylinux.vip
總結(jié)
以上是生活随笔為你收集整理的C++ this指针显式使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 格式化输出,浮点数e,f,g保留位数的计
- 下一篇: C++ 构造函数与this指针