C++ 中this指针的用途
生活随笔
收集整理的這篇文章主要介紹了
C++ 中this指针的用途
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先說結論:
1.形參和變量同名時,可用this指針來區分
2.在類的非靜態成員函數中返回本身,可用return? *this
1.區分形參和變量同名時:
#include <iostream>
using namespace std;class Person
{
public:Person(int age){age = age;}int age;
};void test01()
{Person p1(18);cout << "年齡為: " << p1.age << endl;
}int main()
{test01();system("pause");return 0;
}
上述代碼運行結果多少呢?? ? ? ? ? ? ?答案是-858993460? 當然這個答案毫無意義
為什么呢? 將上述代碼中的age選中? 然后會有下面這種情況? 相信大家知道什么意思? ?就是編譯器不會像人腦一樣將左邊的age看成類的屬性age,所以就導致編譯器認為上述3個age是一回事,所以再編譯器中相當于Person類的屬性age沒有賦值,所以進行輸出的時候就會用0xCCCCCCCC來進行填充,就有了輸出是-858993460的答案
??
?那怎么解決上述問題呢?如下圖:
?在第一個age前面加上this,什么意思呢看看官方解釋:
this指針指向被調用的成員函數所屬的對象!
?大白話來講就是誰調用這個類,this就指向誰,上述這個this指向的就是p1
當然這種錯誤的解決方法還有一種最簡單的:在類中起屬性名字的時候,盡量別和形參名取一樣就好了
?2.return *this返回函數本身
#include <iostream>
using namespace std;class Person
{
public:Person(int age){m_age = age;}Person& PersonAddAge(Person &p){this->m_age += p.m_age;return *this;}int m_age;
};void test02()
{Person p1(18);Person p2(18);p1.PersonAddAge(p2).PersonAddAge(p2).PersonAddAge(p2); cout << p1.m_age << endl;
}int main()
{test02();system("pause");return 0;
}
下面的塊代碼中:這塊代碼中有兩個點
1.返回值類型使用了Person的引用
2.return *this
Person& PersonAddAge(Person &p)
{this->m_age += p.m_age;return *this;
}
A1:為什么要使用Person&的返回值
?return *this就是返回函數本身,但是得注意返回值類型,記得做引用傳遞!!!
總結
以上是生活随笔為你收集整理的C++ 中this指针的用途的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个骂女人的个性签名。
- 下一篇: 单链表相交问题