我已经阅读了关于在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