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.慎用,移植性低
C++晋升之dynamic_cast的更多相关文章
- RTTI: dynamic_cast typeid
dynamic_cast:将基类类型的指针向派生类指针安全转换.多用于下行转换.上行转换时,和static_cast是一样的.C++类型转换看这里.而const_cast用来修改类型的const或vo ...
- c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast
c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast [版权声明]转载请注明出处 http://www.cnblogs.c ...
- C++ dynamic_cast对指针类型的转换
C8-3 三角形还是长方形? (100.0/100 points) 题目描述 在多态概念中,基类的指针既可以指向基类的对象,又可以指向派生类的对象.我们可以使用dynamic_cast类型转换操作符来 ...
- dynamic_cast 和 static_cast 隐式类型转换的区别
首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion ...
- 《Google想出了一个决定人员晋升的算法,然后就没有然后了......》有感
Prasad Setty 是 Google People Analytics 团队的副总裁.7 年前 Google 成立的这支团队的职责是收集和利用数据来支撑公司的管理实践.其使命很简单,即基于数据和 ...
- C++ 中dynamic_cast<>的使用方法小结 -判断类型-rtti
将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理 即会作一定的判断. 对指针进行dynamic ...
- C++强制类型转换操作符 dynamic_cast
dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用. >>>>>>>>>>>编译器的RTTI设 ...
- static_cast、dynamic_cast、reinterpret_cast、const_cast以及C强制类型转换的区别
static_cast 1. 基础类型之间互转.如:float转成int.int转成unsigned int等 2. 指针与void*之间互转.如:float*转成void*.CBase*转成void ...
- c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast
c++强制类型转换:dynamic_cast.const_cast .static_cast.reinterpret_cast 博客分类: C/C++ CC++C#编程数据结构 dynamic_ca ...
随机推荐
- Swing Dance!摇摆舞!小组
Swing Dance!摇摆舞!小组 Swing Dance!摇摆舞
- Java 接口和抽象类差别
原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想非常大程度上取决于它的总体架构,而这个总体架构事实上 ...
- tcp接收xml数据解析
避免tcp接收xml数据时加上xml数据长度,根据xml数据特点来解析recv到的xml数据 int nPos1 = 0; int nPos2 = 0; int nTempPos = 0; int n ...
- MFC获取rgb图像数据后动态显示及保存图片的方法
该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像 第一种方法 #include<vfw.h> 加载 vfw32.lib 链接库 //---------------- ...
- ArcGIS 10.3 for Desktop新特性介绍
ArcGIS 10.3是一个完整公布的ArcGIS平台,它包含新的产品(ArcGIS Pro),针对10.2版本号产品进行了功能增强和稳定性的改进. ArcGIS 10.3 for Server新特性 ...
- SQL_查找用户的表属于哪个表空间
***********************************************声明*************************************************** ...
- HDU 1030 Delta-wave 数学题解
给出一个数字塔,然后求沿着数字之间的边走,给出两个数字,问其路径最短的长度是多少. 看似一条搜索题目,只是有一定做题经验的人都知道,这个不是搜索题,直接搜索肯定超时. 这个是依据规律计算的数学题目. ...
- android中保存Bitmap图片到指定文件夹中的方法
/** 保存方法 */ public void saveBitmap() { Log.e(TAG, "保存图片"); File f = new File("/s ...
- webdynpro MESSGAE
1. 添加辅助类CL_WDR_DEMO_MESSAGES 环境,设计的控件有:输入控件,按钮,每个按钮对应一个事件.分别是下面,然后报消息 TEXT: SUCCESS: method ONACTIO ...
- PHP开发-上传文件
<?php /****************************************************************************** 参数说明: $max_ ...