C++this指针的用途
this指針的用途:
1.當形參和成員變量同名時,可用this指針來區分。
2.在類的非靜態成員函數中返回對象本身,可使用return *this
每一個非靜態成員函數只會誕生一份函數實例,也就是說多個同類型的對象會共用一塊代碼,那么問題是:
這一塊代碼是如何區分哪個對象調用自己的呢?
C++通過提供特殊的對象指針,this指針解決上述問題。
對象p1,p2,p3都要調用這個函數,怎么區分是誰調用的呢?
用this指針解決這個問題
this指針指向被調用的成員函數所屬的對象
簡單來說,誰調用這個函數,this指針就指向誰。
1.this指針是隱含每一個非靜態成員函數內的一種指針。
2.this指針不需要定義,直接使用即可。
1、解決名稱沖突:
現在讓我們看一下名稱沖突問題:
結果為0,如果你用的編譯器是vs,結果應該是亂碼,我用的是Dev-C++。
編譯器會認為這3個age是同一個age,跟你這個屬性age不是一回事,所以我們從來沒有給這個屬性age進行賦值操作。
解決方法:
1.成員屬性和我們傳入的形參名稱不要同名。
2.使用this指針。
如何使用this指針呢?
代碼如下:
此時編譯器就這樣認為了,所以就解決了這個問題。
2、返回對象本身用*this
首先先看這樣一段代碼:
我們的目的是讓p2加3次p1的年齡,想要的p2年齡返回結果為40,可編譯器報錯,這是為什么呢?
因為我們第一次調用PersonADDAge這個函數后,返回的是void,所以就不能再調用這個PersonADDAge函數了,那如果我們可以讓第一次調用這個函數后的返回值仍然是p2,那就可以再次調用這個函數,那我們要如何實現呢?
使用this指針。
代碼如下:
#include <iostream> using namespace std;class Person {public:Person(int age) {this->age = age;}int age;//如果要返回本體,要用引用的方式返回。Person &PersonADDAge(Person &p) {this->age += p.age;//this指向p2的指針,而*this指向的就是p2這個對象本體。return *this;}};//1.解決名稱沖突//void test01() { // Person p1(18); // cout << "p1的年齡為:" << p1.age << endl; // //} //2.返回對象本身用*thisvoid test02() {Person p1(10);Person p2(10);//鏈式編程思想p2.PersonADDAge(p1).PersonADDAge(p1).PersonADDAge(p1);cout << "p2的年齡為:" << p2.age << endl;}int main() { // test01();test02();return 0; }此時的結果就是40了。
那為什么要用引用呢?
引用指向本身內存,不用引用就是拷貝了,而拷貝指向另一個內存。
這里返回的不是指針或者引用,因為前面加了,所以返回的是p2本體。*
這個時候我們把這個引用刪除,看看結果又是多少?
結果為:20
為什么呢?
因為此時返回的是一個拷貝的數據,每一次返回都是一個新的對象。
所以最后就第一次調用對真正的p2產生影響,所以結果為20
總結
以上是生活随笔為你收集整理的C++this指针的用途的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 站长统计怎么解决(站长统计怎么弄)
- 下一篇: C++继承的继承方式