C++ 中dynamic_cast<>的使用方法小结 -判断类型-rtti
对指针进行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中设置。 
*/
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; 
}
C++ 中dynamic_cast<>的使用方法小结 -判断类型-rtti的更多相关文章
- Eclipse中Jsp页面警告的解决方法小结
		恩,只要是开发人员,这样的小事情总会遇到的,对于这其中的某些警告性的错误是不影响代码的运行的,对应的功能也是能实现的,不过总给人一种不太好看的感觉!如果代码写的比较符合规范,这些问题也就自然而然的消失 ... 
- IIS8中添加WCF支持几种方法小结[图文]
		方法一 最近在做Silverlight,Windows Phone应用移植到Windows 8平台,在IIS8中测试一些传统WCF服务应用,发现IIS8不支持WCF服务svc请求,后来发现IIS8缺少 ... 
- python中执行命令的3种方法小结-乾颐堂
		目前我使用到的python中执行cmd的方式有三种: 1. 使用os.system("cmd") 特点是执行的时候程序会打出cmd在linux上执行的信息. import os o ... 
- java中获取各种上下文路径的方法小结
		一.获得都是当前运行文件在服务器上的绝对路径在servlet里用:this.getServletContext().getRealPath(); 在struts用:this.getServlet(). ... 
- Laravel中常见的错误与解决方法小结
		一.报错: 「Can't swap PDO instance while within transaction」 通过查询 Laravel 源代码,可以确认异常是在 setPdo 方法中抛出的: ? ... 
- IIS配置svc(IIS8中添加WCF支持几种方法小结)
		方法一 最近在做Silverlight,Windows Phone应用移植到Windows 8平台,在IIS8中测试一些传统WCF服务应用,发现IIS8不支持WCF服务svc请求,后来发现IIS8缺少 ... 
- Yii中的数据库事务的使用方法小结
		在项目中遇到批量删除的地方一般会使用到事务,下面列举一个用法实例与大家分享. 查看代码 打印 01 <?php 02 $array=array( 03 0=>array('us ... 
- VC++ 中简单操作MP3音乐的方法,小结
		#include <windows.h> #include <stdio.h> #include <mmsystem.h> #include <shellap ... 
- C#中使用split分割字符串的方法小结
		string s=abcdeabcdeabcde; string[] sArray=s.Split(c) ; foreach(string i in sArray) Console.WriteLine ... 
随机推荐
- java的反射机制
			一.java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动, ... 
- LAMP配置虚拟目录
			1. httpd.conf中添加 Listen 81 2. 1 <VirtualHost 127.0.0.2:81> 2 DocumentRoot E:\ws\2011\DiscuzSp ... 
- ThreadLocal源码分析
			1.概述 ThreadLocal,可以理解为线程的局部变量,作用就是为每一个使用该变量的线程都提供一个变量值的副本,每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突. ThreadLo ... 
- 《java JDK7学习笔记》之跨平台与路径设置
			Platforms表示Solaris.Linux.Windows各种操作系统平台,在这些平台上架构了java Virtaul Machine,简称JVM,Java虚拟机. Java虚拟机可以让java ... 
- 摆脱npm的网络问题: 淘宝npm镜像
			在使用npm install的时候, 经常会因为网络问题, 各种安装不顺利, 一个字'烦躁'. 自从遇上淘宝npm之后,执行cnpm install之后, 怎一个'快'字了得. 闲话不多说, 直接上干 ... 
- linux批量删除进程
			在虚拟机用脚本跑了几十个client程序用来测试服务器,然后发现参数设置错误,得重来,就傻眼了,不知道怎么关这么多client进程,总不能一个一个关.还好,学习一下,想出了以下的命令. ps -e ... 
- 非常不错的点餐系统应用ios源码完整版
			该源码是一款非常不错的点餐系统应用,应用源码齐全,运行起来非常不错,基本实现了点餐的一些常用的功能,而且界面设计地也很不错,是一个不错的ios应用学习的例子,喜欢的朋友可以下载学习看看,更多ios源码 ... 
- [转]ASP.NET 成员资格 Part.1(API)
			本文转自:http://www.cnblogs.com/SkySoot/archive/2013/04/08/3008418.html 表单验证解决了 ASP.NET 应用程序页面验证的问题,但另一方 ... 
- PHP&MySQL(二)——困也得啃书
			madan,所有事情都敢赶在一起...以后每天中午去学车啊,好开心..晚上好困,但是困也得啃书........ 二.PHP脚本编程语言 什么变量啊,数据类型啊,特别特别基本的不记录了,说点容易忽略的. ... 
- Pairs Forming LCM(素因子分解)
			http://acm.hust.edu.cn/vjudge/contest/view.action?cid=109329#problem/B 全题在文末. 题意:在a,b中(a,b<=n) ... 
