細說 class類中的this指標與 建構函式

2021-07-23 04:21:54 字數 2687 閱讀 8140

一提到c++就會不自覺的提到  class類  ,但是提到類時  就不得不說一下this指標 與 建構函式了 ,這是c++類中的兩個很重要的知識點。如果不搞懂的話 ,那你的c++  class 就有一半都廢了。所以說是重中之重也不為過。

下面就讓我們來好好理理 這兩個問題!!!

先說說this指標吧!

為什麼  c++中要引入this指標這個概念呢 !!!

那就要考慮乙個問題了  :

比如定義乙個日期類date

class date 

private:

int _year;

int _month;

int _day;

}

如果要是對這個類定義例項化  ,(定義三個物件)

date d1(2016,9,26);

date d2(2016,9,26);

date d3(2016,9,26);

要對d1 ,d2  ,d3 這三個日期類進行賦值時,該怎麼來判斷要放在那個位址呢!!!

說到這塊  ,就要引出我們所說的this指標了 。。。

編譯器在識別類時  要經歷三個過程 :

1、識別類名 ;

2、識別類中的成員變數; 

3、識別函式 並對函式進行改寫 (預設的為函式加上指標this引數)

在類中呼叫函式是就要通過this指標來儲存這個類的位址 ,然後根據this指標提供的位址來對類成員變數進行操作。

this指標在c++類中的特性是:

1、this指標的型別   是   類型別 *const this;

2、this指標為 類成員函式的第乙個預設隱式引數,編寫者不能明確的傳遞;

3、this指標並不是類成員變數  ,所以不影響類的大小;

4、this指標的作用域僅限於類的內部;

在c++中類中呼叫函式 :

呼叫約定

如果使用的是__thiscall    ,則在記憶體中this指標的傳遞         使用的暫存器ecx傳遞的

要是使用的是_cdecl         ,則在記憶體中this指標的傳遞         使用的儲存器傳遞

關於this指標的最後乙個問題就是:

大家都知道在c++中有乙個引用操作符,,,為什麼在這塊  不是this引用呢

這就是要說到c++的發展史了!!!!

c++在剛開始  ,又被叫做是帶類的c   ,此時的c++中還沒有引用這個概念   ,所以會使用的是this指標而不是引用。

另外 , 如果要是this指標為空是不能呼叫  類內的 成員變數   。。。

this指標說的差不多了

再來說說建構函式了吧

他們分別是:

1、建構函式;

2、拷貝建構函式;

3、析構函式;

4、賦值操作符的過載;

5、取位址操作符的過載;

6、const修飾的取位址操作符的過載;

我們主要說說建構函式

1、名字必須與類名要相同;

2、沒有返回值;

3、建立類物件時由編譯器自動呼叫;

4、在類的物件週期內,建構函式只能呼叫一次;

5、可以過載的,根據引數的不同選擇呼叫不同的建構函式;

6、如果沒有顯式的建構函式,系統會預設提供乙個建構函式;

7、無參的建構函式與帶預設值的建構函式  都認為是帶預設值的建構函式,並且只能有乙個。

1、構建物件;

2、初始化物件;

3、型別轉換(        形式  為data    d = 2016  ;)(但是建構函式必須為單參);

1、初始化列表

以乙個冒號開始 ,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在園括號中的初始化式;

特點是:

(1)、每個成員在初始化列表中只能出現一次;

(2)、初始化列表僅用於初始化資料成員,並不指定這些資料成員的初始化順序,

其實資料成員在類中定義順序就是在引數列表中的初始化順序。

(3)、盡量避免使用成員初始化成員,成員的初始化順序最好和成員的定義順序保持一致。

必須放在初始化列表中初始化的有:

1、成員變數為const型別;

2、引用變數;

3、子物件(子類無缺省建構函式);

舉個例子吧!!!看著更舒服點

class date 

private:

int _year;

int _month;

int _day;

int const a;

int &ra ;

};

2、對成員變數進行賦值

這種方法對有的特殊變數是不能賦值的只能通過初始化列表來;(就是必須放在初始化列表裡的那些變數)

class date 

private:

int _year;

int _month;

int _day;

};

最後說說 這個

【explcit】

用explicit修飾建構函式,抑制由建構函式定義的隱式轉換,explicit關鍵字類內部的構建宣告上,在類的定義體外部的定義上不再重複。

說的已經差不多了  ,以後要是有什麼沒有想到的再來補充吧 ,或者要是寫的有什麼問題,大家可以提出來;;;

Python類中的方法(CLASS)

在類中可以根據需要定義一些方法,定義方法採用def關鍵字,在類中定義的方法至少會有乙個引數,一般以名為 self 的變數作為該引數 用其他名稱也可以 而且需要作為第乙個引數。舉例 class people sname xiaohong high 172.5 weight 180 男 def eat ...

QTP 中class 類的應用(一)

發現直接在resource中載入含有calss的vbs檔案,qtp無法識別類,導致指令碼中無法new類物件。這裡給出幾種類的使用方法,及類的應用。1 直接在action指令碼中定義類,然後action中任何地方都可以例項化類 2 用executefile引入類定義檔案,然後action中任何地方都可...

python中class類的屬性包裝

對比 class person object def init self self.age none defage self,n if 0 n 100 self.age n else print age error person1 person person1.age 1000 print pers...