復制構造函數、重載賦值運算符、類型轉換小結


1.轉換函數:

A.單個值轉換為類類型:C_name(typename value)沒有返回值

B.類類型轉換為其他類型:operator typename()沒有返回值,但需要寫出return語句

可以用關鍵字explicit來關閉隱式轉換,例如:C_name class1=xxx;將是錯誤的,必須寫成:

C_name class=C_name(xxx);或C_name class=(C_name)xxx;

 

2.復制構造函數:
復制構造函數:復制構造函數接受一個指向對象的常量引用,當且僅當程序創建一個對象的副本時(常見於函數按值傳遞和返回對象),復制構造函數沒有返回值,且一般調用該復制構造函數的對象為副本,副本對象通過調用復制構造函數來將參數對象中的內容復制給予自己使用,然后副本將值賦給函數中的局部變量,在函數結束后,該副本自毀(調用析構函數)

C_name (const C_name & class1)

復制構造函數沒有返回值。

 

3.重載的賦值運算符

C_name & operator = (C_name &)

重載的賦值運算符當且僅當對象間賦值時被調用,返回類型可以是對象,也可以是對象的引用(一般常用對象的引用)*注意:這里提醒一下,重載的<<的運算符必須返回ostream對象的引用,因而返回ostream對象本身將導致上文的復制構造函數被調用,而ostream對象沒有公用的復制構造函數。

重載賦值運算符在編寫時應當注意都舊數據的妥當處理,尤其是使用動態內存分配儲存的數據。

 

 

 

 

*注意:如果要編寫以上的復制構造函數和賦值運算符,注意使用深度復制(即復制最底層的數據,例如不是僅僅的復制指針本身,而是要復制指針指向的內容)

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com