dynamic cast 安全轉換

2021-08-15 08:52:59 字數 1302 閱讀 7533

上行轉換:子類指標轉父類指標

下行轉換:父類指標轉子類指標

上行轉換一定是安全的。即由子類指標轉為父類指標。

下行轉換可能會有問題。

對於上圖,a是父類:

①  a*轉b*:下行轉換,使用dynamic_cast會得到null

即定義乙個物件

a*,然後使用

dynamic_cast

將其轉換為

b*。下同。

②  b*轉a*:上行轉換,使用dynamic_cast會得到正確的指標

對於上圖,a是父類:

①  a*轉b1*:下行轉換,使用dynamic_cast會得到null

②  a*轉b2*:下行轉換,使用dynamic_cast會得到null

③  b1*轉a*:上行轉換,使用dynamic_cast會得到正確的指標

④  b2*轉a*:上行轉換,使用dynamic_cast會得到正確的指標

⑤  b1*轉b2*:橫向轉換,使用dynamic_cast會得到null

對於上圖,a1,a2是父類:

①  a1*轉b*:下行轉換,使用dynamic_cast會得到null

②  a2*轉b*:下行轉換,使用dynamic_cast會得到null

③  b*轉a1*:上行轉換,使用dynamic_cast會得到正確的指標

④  b*轉a2*:上行轉換,使用dynamic_cast會得到正確的指標

⑤  a1*轉a2*:橫向轉換,使用dynamic_cast會得到null

⑥  b*轉a1*,再由a1*轉a2*:雖然後期的a1*轉a2*屬於橫向轉換,但是由於原始指標是b*,所以使用dynamic_cast會得到正確的指標

4.   特殊情形:

①  a*轉void*:使用dynamic_cast會得到有值的指標,dynamic_cast認為一定是安全的

②  void*轉a*:使用dynamic_cast編譯會報錯,被轉換的資料型別不能為void*

5.   a與b是兩個無關的類:

①  a*轉b*:使用dynamic_cast會得到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 用來將乙個指標...

C 型別轉換操作符 dynamic cast

dynamic cast 顧名思義是支援動態的型別轉換,即支援執行時識別指標或引用所指向的物件。dynamic cast 用於c 類繼承多型間的轉換,分為 子類向基類的向上轉型 up cast 基類向子類的向下轉型 down cast 其中向上轉型不需要借助任何特殊的方法,只需用將子類的指標或引用賦...