• 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

  • 相关阅读:
    管理Shader——Shader概览
    游戏组件——总结
    管理Shader——总结
    游戏组件——俄罗斯方块
    1371. Cargo Agency 夜
    1611. Decimation 夜
    hdu 4415 Assassin’s Creed 夜
    1326. Bottle Taps 夜
    hdu 4405 Aeroplane chess 夜
    1223. Chernobyl’ Eagle on a Roof 夜
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/9365098.html
Copyright © 2020-2023  润新知