4、必须是一个引用。dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。Cpp代码 1.class B 1.{ 2.public: 3. int m_iNum; 4. virtual void foo(); 5.}; 6. 7.class D : public B 8.{ 9.publ
7、虚函数的类才有虚函数表,没有定义虚函数的类是没有虚函数表的。另外,dynamic_cast还支持交叉转换(crosscast)。如下代码所示。Cpp代码 1.class A 2.{ 3.public: 4. int m_iNum; 5. virtual void f(){} 6.}; 7. 8.class B : public A 9.{ 10.}; 1. 2.class D : public A 3.{ 4.}; 5. 6.void foo() 7.{ 8. B *pb = new
8、 B; 9. pb->m_iNum = 100; 10. 11. D *pd1 = static_cast(pb); //compile error 12. D *pd2 = dynamic_cast(pb); //pd2 is NULL