this指針
this指針含義及用法:
1、this指針是指向每一個成員函數的特殊指針,當不同的對象調用同一個類的成員函數代碼時,編譯器會依據該成員函數的this指針所指向的不同對象來確定應該引用哪個對象的數據成員;
2. 當對一個對象調用成員函數時,編譯程序先將對象的地址賦給this指針,然後調用成員函數,每次成員函數存取數據成員時,由隱含使用this指針;
3. 在C++中,this指針被隱含地聲明爲: X *const this,這意味着不能給this 指針賦值; 在X類的const成員函數中,this指針的類型爲:const X* const, 這說明this指針所指向的這種對象是不可修改的(即不能對這種對象的數據成員進行賦值操作);
4. 由於this並不是一個常規變量,所以,不能取得this的地址。
5. 在以下場景中,經常需要顯式引用this指針
(1) 爲實現對象的鏈式引用;
(2) 爲避免對同一對象進行賦值操作;
(3) 在實現一些數據結構時,如list。
this指針特性:
1、this指針的類型 類類型* const;
2、this指針並不是對象本身的一部分,不影響sizeof的結果;
3、this的作用域在類成員函數的內部;
4、this指針是類成員函數的第一個默認隱含參數,編譯器自動維護傳遞,類編寫者不能顯式傳遞。
例:
#include
using namespace std;
struct Date
{
int _year;
int _month;
int _day;
};
void SetDate(Date* _this, int year, int month, int day)
{
_this->_year = year;
_this->_month = month;
_this->_day = day;
}
void PrintDate(Date* _this)
{
printf("%d-%d-%d\n", _this->_year, _this->_month, _this->_day);
}
int main()
{
Date d;
SetDate(&d, 2016, 9, 27);
PrintDate(&d);
system("pause");
return 0;
}
2、沒有返回值。
3、有初始化列表(可以不用)。
4、新對象被創建,由編譯器自動調用,且在對象生命期內僅調用一次。
5、構造函數可以重載,實參決定了調用那個構造函數。
6、如果沒有顯式定義時,編譯器會提供一個默認的構造函數。
7、無參構造函數和帶有缺省值的構造函數都認爲是缺省構造函數,並且缺省構造函數只能有一個。
2、初始化對象
3、類型轉換