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设计来避免动态铸造。
尝试先使用搜索旧答案
动态强制转换正在运行时安全地发现对象实例的类型。
这是由编译器生成的引用表实现的,它可能相当大。因此,如果程序员知道他们不使用这个特性,那么在编译过程中通常会禁用它。