C dynamic cast強制型別轉換

2021-10-02 08:16:34 字數 979 閱讀 2050

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...