究竟什么是c ++中的动态转换

时间:2009-11-23 08:21:43

标签: c++ dynamic-cast

任何人都可以告诉c ++中动态强制转换的确切含义。 我们在哪里可以使用这种动态铸造? 这是在采访中被问到的,我对这个问题一无所知:)。

3 个答案:

答案 0 :(得分:9)

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。

答案 1 :(得分:2)

首先尝试使用搜索 old answer

答案 2 :(得分:0)

Dynamic casting可以在运行时安全地发现对象实例的类型。

这是通过编译器生成引用表来实现的,这些引用表可能相当大。因此,如果程序员知道他们不使用该功能,则在编译期间通常会禁用它。