1. 程式人生 > >C++中的this指標的分析

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