我已經閱讀了關於在C++中進行轉換的一些信息。從C背景的,使用普通的(type)
鑄造是對於像void *
但C++常見的有dynamic_cast
,reinterpret_cast
,static_cast
等將指針基類轉換爲指向派生類的指針
問題/問題/問題是應使用哪些上述管型的當基指針和派生指針之間的轉換時。
我們的數據存儲器存儲指向基類的指針(B
)。這些函數分配派生的指針(D
)。
的代碼示例如下:
class B
{ int _some_data; }
class D : public B
{ int _some_more_data; }
然後代碼看起來是這樣的:
D *obj = new D;
obj->_some_data = 1;
obj->_some_more_data = 2;
<store obj>
再後來,當我們訪問數據:
B *objB = <get out data>
if (objB->_some_data == 1)
{ D *objD = (D *) objB; <do some processing> }
現在投我關心的是D *objD = (D *) objB
。
我們應該使用哪一種?
謝謝。
在這種情況下,dynamic_cast。它將檢查該對象是否可以在運行時轉換爲D *。 – BoBTFish 2012-02-21 08:25:49
@BoBTFish'dynamic_cast'只適用於多態類型。 – 2012-02-21 08:30:32