上行轉換:子類指標轉父類指標
下行轉換:父類指標轉子類指標
上行轉換一定是安全的。即由子類指標轉為父類指標。
下行轉換可能會有問題。
對於上圖,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 其中向上轉型不需要借助任何特殊的方法,只需用將子類的指標或引用賦...