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

what exactly is dynamic casting in c++

本问题已经有最佳答案,请猛点这里访问。

谁能说出C++中的动态铸造方法究竟是什么。我们在哪里可以使用这种动态铸造?这是在采访中被问到的,我对这个问题一无所知。


动态强制转换是一种强制转换方法,用于在运行时查找对象的类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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设计来避免动态铸造。


尝试先使用搜索旧答案


动态强制转换正在运行时安全地发现对象实例的类型。

这是由编译器生成的引用表实现的,它可能相当大。因此,如果程序员知道他们不使用这个特性,那么在编译过程中通常会禁用它。