帶你瞭解C++this指針的用法及其深究

前言

今天,碼神像一個新車手一樣,嘗試著用模板來更新一下,不要建議哦,畢竟沒有放棄愛情的拓海也不是真正的車神,哈哈,發車瞭

一、this指針是個什麼東東,重要嗎?

首先,我以碼神的名義起誓,this指針絕對重要,尤其是對於c++這個面向對象編程的語言來說!

有的碼手可能要說瞭:你說重要就重要?那我還說不重要呢?

這個麼,空口無憑,我現在來舉一個例子:

我們知道對於一個類來說,要有很多工作要做,其中類的成員函數可以訪問類的數據(限定符隻是限定於類外的一些操作,類內的一切對於成員函數來說都是透明的),那麼成員函數如何知道哪個對象的數據成員要被操作呢,這時c++中的this指針就應用而生瞭

註:

每個對象都擁有一個指針:this指針,通過this指針來訪問自己的地址。this指針不是對象的一部分,故sizeof不會體現出this指針的大小,this指針的類型取決於使用this指針的成員函數類型以及對象類型。

請添加圖片描述

二、案例理解

代碼如下(示例):

#include<iostream>
using namespace std;
class Person
{
public:
	Person(int age)
	{
		this->age=age;
		//this指針指向被調用的成員函數所屬的對象
	}
	int age;
	//int m_Age;
	void PersonAddAge(Person &p)
	{
		this->age += p.age;
		//this指向篇的指針,而*this指向的是篇這個本體
		return *this;
	}
}
//解決名稱沖突
void text01()
{
	Person p1(18);
	cout<<"p1age:"<<p1.age<<endl;
}
//返回對象本身用*this
void text02()
{
	Person p1(10);
	Person p2(10);
	p2.PersonAddAge(p1);
	cout<<"p2的age:"<<p2.age<<endl;//20
	p2.PersonAddAge(p1).PersonAddAge(p1);
	cout<<"p2的age:"<<p2.age<<endl;//30
	//鏈式編程思想
}
int main()
{
	text01();
	text02();
	return 0;
}

主要的用途

當形參和成員變量同名時,可用this指針來區分

在類的非靜態成員函數中返回對象本身,可使用return *this

總結 通過上面我們知道在C++中成員變量和成員函數是分開存儲的每一個非靜態成員函數隻會誕生一份函數實例,也就是說多個同類型的對象會共用一塊代碼c++通過提供特殊的對象指針,this指針,解決上述問題。this指針指向被調用的成員函數所屬的對象this指針是隱含每一個非靜態成員函數內的一種指針this指針不需要定義,直接使用即可

最後:this指針指向被調用的成員函數所屬的對象

總結

本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: