C++中的this指標的分析
阿新 • • 發佈:2018-12-08
作為面向物件的語言,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; }