C++中四種類型轉換和智能指針

一、C++中四種類型轉換是:static_cast, dynamic_cast, const_cast, reinterpret_cast

1、const_cast

用於將const變量轉爲非const

2、static_cast

用於各種隱式轉換,比如非const轉const,void*轉指針等, static_cast能用於多態向上轉化,如果向下轉能成功但是不安全,結果未知;

3、dynamic_cast

用於動態類型轉換。只能用於含有虛函數的類,用於類層次間的向上和向下轉化。只能轉指針或引用。向下轉化時,如果是非法的對於指針返回NULL,對於引用拋異常。要深入瞭解內部轉換的原理。

向上轉換:指的是子類向基類的轉換

向下轉換:指的是基類向子類的轉換

它通過判斷在執行到該語句的時候變量的運行時類型和要轉換的類型是否相同來判斷是否能夠進行向下轉換。

4、reinterpret_cast

幾乎什麼都可以轉,比如將int轉指針,可能會出問題,儘量少用;

5、爲什麼不使用C的強制轉換?

C的強制轉換表面上看起來功能強大什麼都能轉,但是轉化不夠明確,不能進行錯誤檢查,容易出錯。

C++裏面的四個智能指針: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中後三個是c++11支持,並且第一個已經被11棄用。

二、爲什麼要使用智能指針:

智能指針的作用是管理一個指針,因爲存在以下這種情況:申請的空間在函數結束時忘記釋放,造成內存泄漏。使用智能指針可以很大程度上的避免這個問題,因爲智能指針就是一個類,當超出了類的作用域是,類會自動調用析構函數,析構函數會自動釋放資源。所以智能指針的作用原理就是在函數結束時自動釋放內存空間,不需要手動釋放內存空間。

三、重寫與重載

重載:兩個函數名相同,但是參數列表不同(個數,類型),返回值類型沒有要求,在同一作用域中
重寫:子類繼承了父類,父類中的函數是虛函數,在子類中重新定義了這個虛函數,這種情況是重寫

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