this指針與構造函數

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

構造函數
    是一個特殊的成員函數,名字與類名相同,創建類類型對象時,由編譯器自動調用,在對象的生命週期內只且只調用一次,以保證每個數據成員都有一個合適的初始值。類如果沒有顯式定義構造函數時,編譯器會合成一個默認的構造函數。編譯器生成的默認構造函數使用與變量初始化相同的規則來初始化成員,具有類類型的成員通過運行各自的構造函數來進行初始化。
構造函數特性:
1、函數名與類名相同。
2、沒有返回值。
3、有初始化列表(可以不用)。
4、新對象被創建,由編譯器自動調用,且在對象生命期內僅調用一次。
5、構造函數可以重載,實參決定了調用那個構造函數。
6、如果沒有顯式定義時,編譯器會提供一個默認的構造函數。
7、無參構造函數和帶有缺省值的構造函數都認爲是缺省構造函數,並且缺省構造函數只能有一個。
8、構造函數不能用const修飾。
構造函數作用:
1、構建對象
2、初始化對象
3、類型轉換
初始化列表:以一個冒號開始,接着一個以逗號分隔的數據列表,每個數據成員後邊跟一個放在圓括號裏的初始化表達式。
初始化順序:①每個成員在初始化列表中只能出現一次;
          ②儘量避免用成員初始化成員;
          ③初始化順序按數據成員在類中定義順序。
注:若類中包含另一個類,若子類沒有缺省的構造函數,則類的構造函數初始化時須對子類對象進行初始化(在初始化列表中初始化)。

有問題的話大家一定要給我說哦!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章