Dynamic cast型別轉換運算子的使用

2021-10-08 02:24:29 字數 994 閱讀 8161

目錄

dynamic_cast型別轉換運算子的使用

相較於static_cast的優點

**示例

static_cast是在編譯時發揮型別轉換的作用,而dynamic_cast是在執行期間進行型別的轉換。因此當你不知道型別轉換有沒有成功的時候,使用dynamic_cast進行錯誤檢查是個不錯的選擇。當型別轉換沒成功時,會返回乙個null指標,這樣我們就可以用返回指標的值來判斷轉換有沒有成功。但是編譯過程中執行型別轉換要比邊執行程式邊型別轉換要快,效率要高,因此當我們已知型別轉換一定會成功時(比如:派生類指標一定會型別轉換成基類指標),我們應該用static_cast型別轉換符,因為這樣在保證了安全的基礎上又提高了效率。

#include #include using namespace std;  

class cperson  

virtual void showinf()  

};  

class cstudent: public cperson  

~cstudent()  

void showinf()  

};  

void converter(cperson *person) // 指標性質發生變化僅僅代指指標所指向的有效區域發生改變  

}  int main()  

注:這種在執行階段識別物件型別的機制稱為執行階段型別識別(runtime type identification,rtti)。

這裡我們用if判斷語句,判斷傳入指標的型別,這裡切記:不相關的型別之間不可以發生轉換,派生類可以向基類發生轉換,但是基類不能向派生類發生轉換,因為派生類包含基類,因此基類包含的資料少,派生類包含的資料多,你如果只初始化部分資料,那其他未初始化的派生類成員資料就充滿了不確定性,因此這樣做會發生不可預知的錯誤。

由以上陳述可以得知:當我們傳入乙個基類的指標,dynamic_cast(person)會返回null,即返回空指標。

c 型別轉換之dynamic cast

dynamic cast僅用於物件的指標和引用,它確保型別轉換記過是乙個完全合法的請求類物件。因此,dynamic cast在轉換乙個類到乙個其基類的時候,總是成功 class cbase class cderived public cbase cbase b cbase pb cderived d...

dynamic cast 動態強制型別轉換

dynamic cast必須要有虛函式才能進行轉換,static cast 靜態轉換,不安全。執行時型別資訊通過運算子dynamic cast來提供。dynamic cast 用來向下轉型,將基類指標轉換為派生類指標 把基類指標轉換為派生類指標 運算子dynamic cast ptr 用來將乙個指標...

dynamic cast 安全轉換

上行轉換 子類指標轉父類指標 下行轉換 父類指標轉子類指標 上行轉換一定是安全的。即由子類指標轉為父類指標。下行轉換可能會有問題。對於上圖,a是父類 a 轉b 下行轉換,使用dynamic cast會得到null 即定義乙個物件 a 然後使用 dynamic cast 將其轉換為 b 下同。b 轉a...