【问题标题】:what exactly is dynamic casting in c++ [duplicate]c ++中的动态转换到底是什么[重复]
【发布时间】:2010-12-19 09:36:39
【问题描述】:

谁能说出动态转换在 c++ 中的确切含义。 我们究竟可以在哪里使用这种动态转换? 这是在面试中问我的,我对这个问题一无所知:)。

【问题讨论】:

标签: c++ dynamic-cast


【解决方案1】:

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。

【讨论】:

  • 我想你的意思是 Derived2* pDerCasted..?
  • 是的,Derived2。我已经更新了。
【解决方案2】:

尝试先使用搜索 old answer

【讨论】:

  • 好指针,虽然跳过接受的答案并深入研究第二个(通过 litb)这是正确的......不像第一个:/
  • @Mathieu:时间固定,现在是 litb 的答案。无论如何感谢您的提示。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2011-11-25
    • 1970-01-01
    • 2014-10-26
    • 2018-02-16
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多