zoukankan      html  css  js  c++  java
  • 为什么要使用dynamic_cast

    1.dynamic_cast为什么要使用?
    因为能够 安全地 将基类指针或引用转换为派生类的。
    为何这样说呢?
    因为如果被绑定的指针不是目标类型的话说dynamic_cast会失败,对于指针类型的转换,最佳实践是在条件中去执行,这样可以保证转换和结果测试在一个表达式中进行,从而不可能在测试转换前不经意地使用派生类指针。

    举例:

    if (Derived *pDerived = dynamic_cast<Derived *>pBase) //能够转换成功,说明pBase指向的是Derived类型的对象
    {
        //使用pDerived指向的派生类对象
    }
    else//pBase指向的是Base类型的对象
    {
        //使用pBase指向的基类对象
    }

     2.什么时候可以使用dynamic_cast来代替虚函数?

    3.dynamic_cast使用的场景:

    如果你必须做一个非多态的工作在继承类B和C上,但只能接收基类A,则需要如下的操作:

    class A { public: virtual ~A(){} };
    
    class B: public A
    { public: void work4B(){} };
    
    class C: public A
    { public: void work4C(){} };
    
    void non_polymorphic_work(A* ap)
    {
      if (B* bp =dynamic_cast<B*>(ap))
        bp->work4B(); 
      if (C* cp =dynamic_cast<C*>(ap))
        cp->work4C(); 
    }
    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    Python 函数 之 目录
    python---------匿名函数
    python-------递归函数
    python-----内置函数
    hibernate.cfg.xml
    struts2 工作原理
    拦截器
    js制作 子菜单
    struts---最简单实例步骤
    常用标签---地址----
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/12820458.html
Copyright © 2011-2022 走看看