2、其目的是初始化類的私有成員變數。
3、值得注意的是,類的建構函式沒有返回值。(並不是說它的返回值是void,而是根本沒有返回值)
4、乙個類可以有多個建構函式,他們之間的用形式引數數量的不同來區別。
5、沒有任何形參的建構函式稱為類的「預設建構函式」。
6、當建立乙個類物件時,根據其傳入的實際引數的數量來呼叫類的建構函式。
7、如何向建構函式傳遞引數:在宣告類物件時,在物件名後直接寫上實參列表,編譯器就會根據實參的個數和型別選擇呼叫合適的建構函式。如date date1(2016,5,20);
8、若宣告類物件時沒有實參列表,則:(1) 若該類有預設建構函式,則呼叫該建構函式,同時建立該物件(為該物件分配記憶體空間)。(2) 若該類沒有預設建構函式,則建立該物件。但該物件的私有成員沒有得到初始化。
根據8(2)的情況做一下說明:如果類中沒有預設建構函式,則系統會自動幫你建立乙個預設建構函式,但是其函式題為空,並沒有什麼實際的作用。其作用只是讓你建立乙個沒有實參的物件這個行動變成合法的。所以應該養成編寫建構函式的好習慣。
9、特別說明一下帶有預設引數的建構函式:在預設建構函式的宣告裡設定預設引數。不要在類的函式定義中設定預設值。
如:
class date // date.h
;date::date( int inityear, int initmonth, int initday )
int main()
10、一類特別的建構函式是拷貝建構函式:
(1)、形參型別為該類型別本身且引數傳遞方式為按引用傳遞。
(2)、用乙個已存在的該類物件初始化新建立的物件。
(3)、每個類都必須要有乙個拷貝建構函式。可以顯示定義,若沒有顯示定義,則系統會自動提供乙個預設拷貝建構函式。
(4)、預設拷貝建構函式使用逐位複製方式利用已存在的物件來初始化新建立的物件(相當於賦值=)。
(5)、為了確保作為形參的物件不會被修改,一般宣告為const。如:a::a(const a& obj);
拷貝建構函式的作用:
(1)、建立新的物件時,相當於賦值操作符「=」。
(2)、當類物件作為函式的引數時,實際上是需要拷貝乙個物件的副本給函式使用,所以拷貝建構函式是必須的。
(3)、當某個函式將類物件作為函式的返回值時。當函式返回一物件時,系統將自動建立乙個臨時物件來儲存函式的返回值。建立此臨時物件時需要呼叫拷貝建構函式。
那末何時需要自己寫拷貝建構函式,何時只需系統自動建立的就可以呢?
一般的,如果設計者在拷貝建構函式中有自己的特殊需要,自己定義拷貝建構函式比較好。另外,因為預設拷貝建構函式使用的是淺複製的策略,因此對含指標成員的類並不能滿足需要。所以含指標成員的類的建構函式一般自己定義比較好。需要注意的是含指標成員的類通常應在建構函式(及拷貝建構函式)中分配記憶體,在析構函式中釋放記憶體。
對於不含指標成員的類,使用系統提供(編譯器自動合成)的預設拷貝建構函式即可。
類物件成員的初始化:
物件成員既是在類中宣告的具有類型別的資料成員。為了初始化物件成員,類的建構函式必須呼叫物件成員所屬類的建構函式,如:
classa;
a::a
(參數列0): obj1(參數列1), obj2(參數列2)
以上內容整理自萬海講師上課內容及《c++primer》。 基本知識點
1 程序和執行緒的關係 1 在有執行緒的作業系統裡面,程序是分配資源的基本單位,執行緒是排程的基本單位。2 1個程序可以擁有多個執行緒 3 執行緒同時也有一些自己的資源,包括 程式計數器,堆疊等 4 因為執行緒所擁有的資源比較少,因此進行排程的時候所消耗的資源就少。5 執行緒共享程序的 段,程序的一...
基本知識點
dram 動態隨機訪問儲存器 dynamic random access memory 隨機訪問的意思是,訪問任何乙個記憶體單元的速度和它的位置 位址 無關,讀寫位址0x00001和0xffff0所需要的事件是一樣的。rom 唯讀儲存器 read only memory 它的內容是預先寫入的,掉電也...
Python函式的基本知識點
一 函式 1.函式是一段 的表示,函式可有可無引數 def 函式名 引數 0個或多個 函式體 return 返回值 2.函式定義時,所指定的引數是一種佔位符eg.y f x 中的x 3.函式定義時,引數是輸入,函式體是處理,結果是輸出 ipo 4.可選引數傳遞 放在必選引數後 eg.def fact...