欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中關(guān)于this指針的入門(mén)介紹

 更新時(shí)間:2022年07月08日 08:36:20   作者:幻荼  
this?指針在C++類和對(duì)象中是個(gè)很方便實(shí)用的關(guān)鍵字,可以簡(jiǎn)化對(duì)象成員屬性的調(diào)用,使代碼表達(dá)的含義更加準(zhǔn)確;在之前的學(xué)習(xí)中我們都可以判斷變量所占內(nèi)存空間大小,那么我們創(chuàng)建的類對(duì)象所占的內(nèi)存空間怎么計(jì)算呢?想知道this的妙用和類對(duì)象占用的內(nèi)存空間就來(lái)跟我學(xué)習(xí)吧

簡(jiǎn)介

C++編譯器給每個(gè)“非靜態(tài)的成員函數(shù)“增加了一個(gè)隱藏的指針參

數(shù),讓該指針指向當(dāng)前對(duì)象(函數(shù)運(yùn)行時(shí)調(diào)用該函數(shù)的對(duì)象),在函數(shù)體中所有成員變量的操作,都是通過(guò)該指針去訪問(wèn)。只不過(guò)所有的操作對(duì)用戶是透明的,即用戶不需要來(lái)傳遞,編譯器自動(dòng)完成

特性

1. this指針的類型:類類型* const

2. 只能在“成員函數(shù)”的內(nèi)部使用

3. this指針本質(zhì)上其實(shí)是一個(gè)成員函數(shù)的形參,是對(duì)象調(diào)用成員函數(shù)時(shí),將對(duì)象地址作為實(shí)參傳遞給this

形參。所以對(duì)象中不存儲(chǔ)this指針。

4. this指針是成員函數(shù)第一個(gè)隱含的指針形參,一般情況由編譯器通過(guò)ecx寄存器自動(dòng)傳遞,不需要用戶傳遞

舉例

class Data {
public:
	void Printf()
	{
		cout << _year <<" "<<" "<< _month <<" "<< _day << endl;
	}
	void Init(int year=2022,int month=5,int day=25)
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Data d1,d2;
	d1.Init(2022,1,1);
	d1.Printf();
	d2.Init(2022,2,2);
	d2.Printf();
	return 0;
}

這是一個(gè)簡(jiǎn)單的日期類,那么這里有一個(gè)問(wèn)題,我們?cè)谑褂么蛴『瘮?shù)Printf和初始化函數(shù)Init的時(shí)候,d1和d2調(diào)用的是同一個(gè)函數(shù),那么編譯器是怎么知道我是應(yīng)該設(shè)置/打印d1還是d2呢?

這其實(shí)就使用了this指針

那么具體編譯器是怎么做的呢?

void Printf(const* this)//編譯器實(shí)際上處理的
	{
		cout << this->_year << " " << this->_month << " " << this->_day << endl;
	}
	void Printf()//我們看到的
	{
		cout << _year <<" "<<" "<< _month <<" "<< _day << endl;
	}
void Init(const* this,int year=2022,int month=5,int day=25)//編譯器處理的
	{
		this->_year = year;
		this->_month = month;
		this->_day = day;
	}
	void Init(int year = 2022, int month = 5, int day = 25)//我們看到的
	{
		_year = year;
		_month = month;
		_day = day;
	}
d1.Init(2022,1,1);//我們看到的
	d1.Init(&d1,2022, 1, 1);//編譯器實(shí)際上處理的

實(shí)際上編輯器取了d1和d2函數(shù)的地址,然后傳遞給了const*this,這樣編譯器就能自動(dòng)打印和初始化相應(yīng)的結(jié)構(gòu)了。

注意

我們不能自己在傳參處加const*this和&,這是編譯器自己做的,我們不能搶了編譯器的活,即使做了,編譯也不會(huì)通過(guò),但是里面我們可以加

void Printf(const* this)//錯(cuò)誤
	{
		cout << _year <<" "<<" "<< _month <<" "<< _day << endl;
	}
void Printf()//可以運(yùn)行,但是編譯器默認(rèn)都會(huì)加this->,所以我們可以不用加,加了也沒(méi)事
	{
		cout <<this-> _year <<" "<<" "<< this->_month <<" "<< this->_day << endl;
	}

到此這篇關(guān)于C++中關(guān)于this指針的入門(mén)介紹的文章就介紹到這了,更多相關(guān)C++ this指針內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論