一提到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...