dynamic_cast动态转换

我们都知道dynamic_cast会在运行时进行类型检查,比较安全,static_cast静态转换,不安全

dynamic_cast转换的类型必须是个类,且这个类中必须有虚函数,为什么呢?

虚函数对于dynamic_cast转换的作用

  为何使用dynamic_cast转换类指针时,需要虚函数呢。

Dynamic_cast转换是在运行时进行转换,运行时转换就需要知道类对象的信息(继承关系等)。

如何在运行时获取到这个信息——虚函数表。

  C++对象模型中,对象实例最前面的就是虚函数表指针,

通过这个指针可以获取到该类对象的所有虚函数,包括父类的。

因为派生类会继承基类的虚函数表,所以通过这个虚函数表,我们就可以知道该类对象的父类,在转换的时候就可以用来判断对象有无继承关系。

  所以虚函数对于正确的基类指针转换为子类指针是非常重要的。

另外dynamic_cast支持交叉转换

基类A有两个直接派生类B、C。

那么,将B* pB转换为C* pC,这种由派生类B转换到派生类C的转换称之为交叉转换。

这种情况下只能使用dynamic_cast

原文地址:https://www.cnblogs.com/wangshaowei/p/9365098.html