天天看點

C++中的this指針的分析

作為面向對象的語言,C++程式通常涉及類的編寫,而在類的編寫中,this指針經常出現,本文旨在解釋this指針的概念和用法。

一、this指針的概念

每個類成員函數都含有一個指向被調用對象的指針,這個指針被稱為this,是以

(a) this   即為指向調用對象的指針;

(b) *this  即為指向調用對象的指針的解引用,即為本對象。

二、this指針的用處

this作用域是在類内部,當在類的非靜态成員函數中通路類的非靜态成員的時候,編譯器會自動将對象本身的位址作為一個隐含參數傳遞給函數。也就是說,即使你沒有寫上this指針,編譯器在編譯的時候也是加上this的,它作為非靜态成員函數的隐含形參,對各成員的通路均通過this進行。

例如,調用date.SetMonth(9) <===> SetMonth(&date, 9),this幫助完成了這一轉換 .  在成員函數内部,我們可以直接使用調用該函數的對象的成員,而無需通過成員通路運算符來做到這一點,因為this所指的正是這個對象。任何對類成員的直接通路都被看成this的隐式使用。  this的目的總是指向這個對象,是以this是一個常量指針,我們不允許改變this中儲存的位址

三、this指針的應用場景

(1)當類的成員變量和成員函數的形參辨別符一樣時,可以使用this加以區分。

void Time::setTime(int t)
{
    this->t = t;
}
           

(2)在類的非靜态成員函數中需要傳回類對象本身的引用的時候,直接使用 return *this,如重載指派運算符,為了實作“a=b=c”這種連續指派,需要傳回調用對象的引用。

template<typename T> vector<T>& vector<T>::operator=(initializer_list<T> li)
{
	delete[] _elem;
	_size = 0;
	_capacity = li.size() << 1;
	_elem = new T[_capacity];  //申請記憶體
	for(auto iter=li.begin();iter!=li.end(); iter++)
		_elem[_size++] = *iter;
 
	return *this;
}