(借用部分牛客網友回答)
dynamic_cast<>用於C++類繼承多態間的轉換,分爲:
1.子類向基類的向上轉型(Up Cast)
2.基類向子類的向下轉型(Down Cast)
其中向上轉型不需要藉助任何特殊的方法,只需用將子類的指針或引用賦給基類的指針或引用即可,dynamic_cast、static_cast向上轉型其總是肯定成功的。dynamic_cast是C++爲了保證向下的類型轉化安全而設置的轉化方式
而向下轉換時要特別注意:dynamic_cast操作符,將基類類型的指針或引用安全的轉換爲派生類的指針或引用。dynamic_cast將一個基類對象指針(或引用)cast到繼承類指針,dynamic_cast會根據基類指針是否真正指向繼承類指針來做相應處理。這也是dynamic_cast與其他轉換不同的地方,dynamic_cast涉及運行時類別檢查,如果綁定到引用或指針的對象不是目標類型的對象,則dynamic_cast失敗。如果是指針類型失敗,則dynamic_cast的返回結果爲0,如果是引用類型的失敗,則拋出一個bad_cast錯誤。
注意:dynamic_cast在將父類cast到子類時,父類必須要有虛函數。因爲dynamic_cast運行時需要檢查RTTI信息。只有帶虛函數的類運行時纔會檢查RTTI。
向上轉換一定成功,向下轉換不一定成功。向下轉換必須存在虛函數,不然編譯錯誤。
假如集成關係如下:
1 |
|
變量定義如下:
1 2 3 |
|
更靈活一點:
1 2 3 4 5 |
|