任何人都可以告诉c ++中动态强制转换的确切含义.我们在哪里可以使用这种动态铸造?这是在采访中向我询问的,我对这个问题一无所知:).
dynamic_cast是在运行时查找对象类的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)
Run Code Online (Sandbox Code Playgroud)
注意:通常,应该通过仔细的OO设计来避免Dynamic_cast.