zoukankan      html  css  js  c++  java
  • C++ 在dynamic_cast<>用法

    /*这是从网上断开的试样。主要是关于 dynamic_cast<> 用法。*/
    /*
    行动:对象指向一个基类(或参考)cast一个指向派生类,dynamic_cast将基于一个基类指针确实是一个指针指向继承类做相应的处理,
           即会作一定的推断。


           对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针;
           对引用进行dynamic_cast。失败抛出一个异常。成功返回正常cast后的对象引用。


     
    注意:dynamic_cast在将父类cast到子类时。父类必需要有虚函数。比如在以下的代码中将CBasic类中的test函数不定义成
           virtual时,编译器会报错:error C2683: dynamic_cast : “CBasic”不是多态类型
     
    对编译器的要求:
           dynamic_cast<> 会用到RTTI技术。因此须要启动“执行时类型信息”这一选项,而在VC.net 2003中默认是关闭的。


           所以须要人为的启动这一选项。

    否则编译器会报以下的警告:
     
             warning C4541: “dynamic_cast”用在了带 /GR- 的多态类型“CBasic”上。
           可能导致不可预知的行为从而导致程序在执行时发生异常。
    该设置在 Project->Setting中 C/C++ -> C++ Language中设置。


    */
     
    #include <iostream>
    using namespace std;
     
    class CBasic
    {
    public:
         virtual int test(){return 0;} // 一定要是 virtual
    };
     
    class CDerived : public CBasic
    {
    public:
         virtual int test(){    return 1;}
    };
     
    int main()
    {
         CBasic        cBasic;
         CDerived    cDerived;
         
         CBasic * pB1 = new CBasic;
         CBasic * pB2 = new CDerived;
     
         //dynamic cast failed, so pD1 is null.
         CDerived * pD1 = dynamic_cast<CDerived * > (pB1);   
                     
         //dynamic cast succeeded, so pD2 points to  CDerived object                                        
         CDerived * pD2 = dynamic_cast<CDerived * > (pB2);   
         
         //dynamci cast failed, so throw an exception.            
    //    CDerived & rD1 = dynamic_cast<CDerived &> (*pB1);   
     
    //dynamic cast succeeded, so rD2 references to CDerived object.
         CDerived & rD2 = dynamic_cast<CDerived &> (*pB2);   
     
         return 0;
    }

    转会论坛文章,地址http://bbs.byr.cn/#!article/SoftDesign/14689。使用该节还没有注意到红色

  • 相关阅读:
    每日一篇文献:Robotic pick-and-place of novel objects in clutter with multi-affordance grasping and cross-domain image matching
    每日一篇文献:Intuitive Bare-Hand Teleoperation of a Robotic Manipulator Using Virtual Reality and Leap Motion
    每日一篇文献:Virtual Kinesthetic Teaching for Bimanual Telemanipulation
    HEBI Robotic Arm VR Teleoperation
    「iQuotient Case」AR device teleoperated robotic arm
    VR and Digital Twin Based Teleoperation of Robotic Arm
    HEBI Robotic Arm VR Teleoperation
    Human Robot Interaction
    Immersive Teleoperation Project
    机器人演示学习
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4590183.html
Copyright © 2011-2022 走看看