/*这是从网上断开的试样。主要是关于 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。使用该节还没有注意到红色

C++ 在dynamic_cast&lt;&gt;用法的更多相关文章

  1. C++的static_cast、dynamic_cast和const_cast用法

    static_cast.dynamic_cast和const_cast static_cast: ​ 用法: static_cast < type-id > (expression) ​ ...

  2. C++笔试题库-------Coding整理

    1. 反转字符串 char* strrev1(const char* str) { int len = strlen(str); ]; char *p = temp + len; *p = '\0'; ...

  3. c/c++类型转换相关总结

    在c语言中存在两种类型转换:显式类型转换和隐式类型转换: 显示类型转换:在类型前加上(type)变量,对变量进行的转换,程序员自己显式添加: char *ptra = (char*)ptrb; voi ...

  4. C++ 中dynamic_cast&lt;&gt;的用法

    /*这是从网上摘下的样例,主要讲述了 dynamic_cast<> 的用法.*/ /* 作用:将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会依据基类指针是否真 ...

  5. dynamic_cast 用法

    dynamic_cast < type-id > ( expression ) 该运算符把expression转换成type-id类型的对象.Type-id必须是类的指针.类的引用或者vo ...

  6. dynamic_cast用法

    dynamic_cast < type-id > ( expression ) 该运算符把expression转换成type-id类型的对象.Type-id必须是类的指针.类的引用或者vo ...

  7. c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast

    c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast  [版权声明]转载请注明出处 http://www.cnblogs.c ...

  8. dynamic_cast 和 static_cast 隐式类型转换的区别

    首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion ...

  9. c++ operator操作符的两种用法:重载和隐式类型转换,string转其他基本数据类型的简洁实现string_cast

    C++中的operator主要有两个作用,一是操作符的重载,一是自定义对象类型的隐式转换.对于操作符的重载,许多人都不陌生,但是估计不少人都不太熟悉operator的第二种用法,即自定义对象类型的隐式 ...

随机推荐

  1. 经纬Zhang英拉垫背的企业家VC没有到这种地步这么卑鄙

    经纬的合伙人张颖前不久发了一篇名为<泡沫就在那里------致经纬系CEO的一封信>,这篇文章所提到的泡沫论在业界引发了强烈的反响,随后有评论觉得,这明明是VC(风险投资)们自己的危机,为 ...

  2. JTree demo

    JFrame居中方法一:   setLocationRelativeTo(null); 注意:必须在整个frame初始化完成后再加上此语句,否则将显示在屏幕右下角 方法二: private Dimen ...

  3. SP2010 3D标签云Web部分--很酷的效果,强烈推荐!!

    SP2010 3D标签云Web部分--很酷的效果.强烈推荐! ! 项目描述叙事         基于简单Flash的3D标签云Web部件.SP Server 2010使用. 建立在内置标签云Web部件 ...

  4. 做一个自动修改本机IP和mac的bat文件

    原文:做一个自动修改本机IP和mac的bat文件 1.ip bat修改理论探讨 前两天我突然萌生了一个念头:能不能做一个小程序来实现自动配置或修改IP和mac,达到一键搞定的目的,这样尤其适合那些带着 ...

  5. POJ 1745 Divisibility (线性dp)

    Divisibility Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10598   Accepted: 3787 Des ...

  6. Swift学习笔记7:关闭

    闭包 捕 引用和将其存储在任意常量和变量的上下文. Swift 你会管理 捕获 过程中涉及到的内存操作. 在 函数 章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包採取例如以下三种形式之中的一个: ...

  7. HDU 1518 Square 搜索

    Problem Description Given a set of sticks of various lengths, is it possible to join them end-to-end ...

  8. MVC下判断用户登录和授权状态方法

    MVC下判断用户登录和授权状态方法 在我们日常开发的绝大多数系统中,都涉及到管理用户的登录和授权问题.登录功能(Authentication),针对于所有用户都开放:而授权(Authorization ...

  9. iOS 自己主动布局教程

    springs和struts的问题 你肯定非常熟悉autosizing masks-也被觉得是springs&struts模式.autosizing mask决定了当一个视图的父视图大小改变时 ...

  10. android 推断应用程序是系统程序还是用户程序

    直接上代码: AppInfo.java <span style="font-size:18px;">package com.example.packages; publ ...