zoukankan      html  css  js  c++  java
  • C++晋升之dynamic_cast

    danamic_cast 动态类型转换

    ----RTTI提供的的操作符

    ----动态:在执行阶段

    ----类型转换:检測指针或引用类型,true->转换

    ----体现价值的地方:用于多态

    ----如果出现这种情况:

    父类A虚函数aa()指针p,子类B指针p1,无关类C指针p2

    你的p1和p2在一起传进函数

    函数的功能将传进来的指针强转成A类的,调用函数aa()

    C类没有继承A,这样会崩溃

    前提:1.C和B里没有专门用来鉴别的成员变量

    2.不能让C也继承A

    ----工作中遇到的问题:

    用第三方的软件、库,对方有些没完好你有要用出现上面如果的那种情况

    解决:

    方法一:前提里的那两个绕圈子的方法

    缺点:多了个成员变量或者是多复用了一遍父类

    方法二:dynamic_cast<T>(T1)动态强制转换(引出主题了)

    用:if( p = dynamic_cast<A*>(p1))

    p是父类指针 A是父类 p1是子类指针 TRUE

    仅仅能这样写,用VS測出的

    注意事项:

    1.p 和 A*的位置要相应,p处写的指针是A*处的类的,否则

    编译的时候报的错

    2.p的位置换成子类指针,A*位置换为子类,后面是父类对象

    结果:不报错,是false,和我们想要用动态转换类型的结果要背离

    3.父类必须有虚函数,否则


    4.子类指针必须new,父类无所谓,否则

    5.用VS的时候我没有去打开什么RTTI的选项,其它的编译器有,须要设置里打开

    打开RTTI执行效率会低,对于JAVA和C#,不存在这个问题(由于本来就非常慢)

    6.慎用,移植性低

  • 相关阅读:
    Codeforces 67A【模拟】
    Codeforces325 D【并查集维护连通性】
    CodeForces 363D 【二分+贪心】
    Lightoj1084【DP啊DP】
    lightoj1062【几何(二分)】
    lightoj1066【BFS】
    lightoj1064 【DP求方案】
    lightoj1063【求割点】
    lightoj 1074【spfa判负环】
    CodeForces 382C【模拟】
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4223106.html
Copyright © 2011-2022 走看看