日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C++ 中this指针的用途

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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指针的用途的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。