c++中dynamic_cast用於類繼承層次間的轉換(包括類指標和類引用的轉換),既可以將基類型別轉換成派生類型別,也可將派生類型別轉換成基類型別,其語法為:
dynamic_cast
(expression)
不過常用的還是向下轉換,因為dynamic_cast會對轉換進行安全檢查,至於向上轉換一般會用其它強制型別轉換操作符(考慮到dynamic_cast的效率),具體事例如下:
class
base
;virtual
void
test()
};class
derived
:class
base
;void
test()
};
對於向下轉換,有兩種情形,第一種是基類指標或引用物件是派生類型別,即:
//指標
base* base_p =
newderived()
;derived* derived_p =
dynamic_cast
>
(base_p)
;derived_p-
>
test()
;//輸出「this is derived class」
//引用
derived derived_q;
base& base_q = derived_q;
derived& derived_q2 =
dynamic_cast
>
(base_q)
;derived_q2.
test()
;//輸出「this is derived class」
而對於第二種情形,即基類指標或引用物件是基類型別,則會轉換失敗,即dynamic_cast中new_type和expression需是同一型別轉換才會成功。 類指標的強制轉換
動態轉換dynamic cast 只能從上轉換至下 eg 從父類指標轉換成子類的指標 否則報錯 class bvirtual b classd public b void test intmain d dp dynamic cast bp if dp null else return0 靜態轉換st...
C 派生類強制轉換為基類
在多型的使用時,派生類的指標或引用能夠轉換為基類的指標或引用,即 基類的指標 能夠指向 派生類的基類部分 base b derived d b和d指向的內容是相等的,b d,由於之間有乙個隱式轉換即 b base d b和d的位址是不同的int b int d 由於b指向d的基類部分,d指向的是完整...
C 中的四類強制轉換?
c 中的四類強制轉換?例 class classa virtual void functiona class classb class classc public classa,public classb classc aobject classa pa aobject classb pb aobj...