亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

簡介

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

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

特性

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

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

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

形參。所以對象中不存儲this指針。

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

舉例

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;
}

這是一個簡單的日期類,那么這里有一個問題,我們在使用打印函數(shù)Printf和初始化函數(shù)Init的時候,d1和d2調(diào)用的是同一個函數(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,這樣編譯器就能自動打印和初始化相應(yīng)的結(jié)構(gòu)了。

注意

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

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

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

相關(guān)文章

最新評論