C++學習筆記:類、構造函數

 

C++學習筆記:類-數據抽象

Constructor

爲什麼要用Constructor/Destructor?

-- 確保對象的Initialization/Clearup。



函數的特點

1) 沒有返回值;
2) Destructor沒有參數;

 

Default Constructor

特點:沒有參數;
生成方式:1) 編譯器自動;2) 自定義;

如果沒有定義Default Constructor,編譯器將會自動生成一個。

如果定義了Constructor,那麼編譯器不會自動生成Default Constructor。(如果自己定義,就要負責所有的定義)

成員對象、基類的處理

使用Constructor initialization list 調用成員對象、基類的構造函數。

1) 編譯器自動生成的Default Constructor將會調用成員對象、基類的Default Constructor。
2) 自定義的Constructor要顯式的調用成員對象、基類的特定Constructor。否則將會將會自動調用其Default Constructor。

以上兩種情況下,如果成員對象、基類沒有Default Constructor,將會出錯。

 

注意事項

  • 對擁有其它資源的對象,複製操作要進行“深拷貝”。

 

Copy Constructor

語法:X(X&)

用途:對象拷貝
場合:函數傳值對象參數,函數返回對象。此時將會調用Copy Constructor。
使用原因: 默認 bitcopy 方式

規則

1) 如果類沒有定義Copy Construtor,編譯器將會自動生成一個。

自動生成的Copy constructor 採用bitcopy方式完成對象拷貝。如果成員對象、基類沒有Copy Construtor,編譯器也會自動生成一個。

自 動生成的函數會自動調用成員對象、基類的Copy Construtor。
2) 如果定義了類的Copy Construtor,必須顯式的調用成員對象、基類的Copy Construtor。否則將會調用成員對象、基類的Default Constructor。
3) 如果定義了類的Copy Construtor,編譯器將不再提供default constructor。

防止對象拷貝的方法:使用private類型的copy constructor

Access Control and Friend

friend 破壞了類的封裝性。

Sizeof

如果class中沒有數據成員,編譯器會自動添加一個字節的佔位;
static變量不佔用 class的空間;
如果有Virtual函數,classi中要增加一個“虛函數表指針”;

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