【发布时间】:2010-12-19 09:36:39
【问题描述】:
谁能说出动态转换在 c++ 中的确切含义。 我们究竟可以在哪里使用这种动态转换? 这是在面试中问我的,我对这个问题一无所知:)。
【问题讨论】:
标签: c++ dynamic-cast
谁能说出动态转换在 c++ 中的确切含义。 我们究竟可以在哪里使用这种动态转换? 这是在面试中问我的,我对这个问题一无所知:)。
【问题讨论】:
标签: c++ dynamic-cast
dynamic_cast 是一种在运行时找出对象的类的转换方法。
class Base
{
public:
virtual bool func1();
};
class Derived1 : Base
{
public:
virtual bool func1();
virtual bool funcDer1();
};
class Derived2 : Base
{
public:
virtual bool func1();
virtual bool funcDer2();
};
Base* pDer1 = new Derived1;
Base* pDer2 = new Derived2;
Derived2* pDerCasted = dynamic_cast<Derived2*>(pDer2);
if(pDerCasted)
{
pDerCasted->funcDer2();
}
-> We cannot call funcDer2 with pDer2 as it points to Base class
-> dynamic_cast converts the object to Derived2 footprint
-> in case it fails to do so, it returns NULL .( throws bad_cast in case of reference)
注意:通常情况下,应通过仔细的 OO 设计来避免 Dynamic_cast。
【讨论】:
尝试先使用搜索 old answer
【讨论】:
Dynamic casting 在运行时安全地发现对象实例的类型。
这是通过编译器生成参考表来实现的,参考表可能相当大。因此,如果程序员知道他们不使用该功能,则通常在编译期间将其禁用。
【讨论】: