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的更多相关文章

  1. RTTI: dynamic_cast typeid

    dynamic_cast:将基类类型的指针向派生类指针安全转换.多用于下行转换.上行转换时,和static_cast是一样的.C++类型转换看这里.而const_cast用来修改类型的const或vo ...

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

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

  3. C++ dynamic_cast对指针类型的转换

    C8-3 三角形还是长方形? (100.0/100 points) 题目描述 在多态概念中,基类的指针既可以指向基类的对象,又可以指向派生类的对象.我们可以使用dynamic_cast类型转换操作符来 ...

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

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

  5. 《Google想出了一个决定人员晋升的算法,然后就没有然后了......》有感

    Prasad Setty 是 Google People Analytics 团队的副总裁.7 年前 Google 成立的这支团队的职责是收集和利用数据来支撑公司的管理实践.其使命很简单,即基于数据和 ...

  6. C++ 中dynamic_cast&lt;&gt;的使用方法小结 -判断类型-rtti

    将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理          即会作一定的判断.        对指针进行dynamic ...

  7. C++强制类型转换操作符 dynamic_cast

    dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用. >>>>>>>>>>>编译器的RTTI设 ...

  8. static_cast、dynamic_cast、reinterpret_cast、const_cast以及C强制类型转换的区别

    static_cast 1. 基础类型之间互转.如:float转成int.int转成unsigned int等 2. 指针与void*之间互转.如:float*转成void*.CBase*转成void ...

  9. c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast

    c++强制类型转换:dynamic_cast.const_cast .static_cast.reinterpret_cast 博客分类: C/C++ CC++C#编程数据结构  dynamic_ca ...

随机推荐

  1. C#基础 大盘点

      类型转换   tryParse    字符和整形转换   转译符:  /' 单引号      /" 双引号      // 反斜杠        /0 空字符       /a 感叹号( ...

  2. WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿

    原文:[原创]WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿 在上面一篇文章中,我们对不同版本的IIS,以及ASP.NET得的实现机制进行了详细而深入的分析.在介绍IIS7.0的时候,我们 ...

  3. 稳定婚姻问题和Gale-Shapley算法(转)

    什么是算法?每当有人问作者这样的问题时,他总会引用这个例子:假如你是一个媒人,有若干个单身男子登门求助,还有同样多的单身女子也前来征婚.如果你已经知道这些女孩儿在每个男孩儿心目中的排名,以及男孩儿们在 ...

  4. ZJUT 1423 地下迷宫(期望DP&高斯消元)

    地下迷宫 Time Limit:1000MS  Memory Limit:32768K Description: 由于山体滑坡,DK被困在了地下蜘蛛王国迷宫.为了抢在DH之前来到TFT,DK必须尽快走 ...

  5. Hadoop学习之HBase

    1. HBase有哪些基本的特征? 2. HBase相对于关系数据库能解决的问题是什么? 3. HBase的数据模型是什么?如何表述?有哪些操作形式? 4. HBase的模式Schema设计的一些概念 ...

  6. Swift - 判端网络连接状态,连接类型(3G还是Wifi)

    IJReachability是一个使用Swift写的第三方网络检测类.可以测试网络是否连接,并支持3G和Wifi的检测. 使用样例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  7. java-多线程安全问题

    1. 安全问题产生原因 多个线程操作共享数据. 操作共享数据的线程代码有多条.当一个线程在执行操作共享数据的多条代码过程中,其他线程参与了计算,就会产生线程安全问题. 2. 解决方案 java中用同步 ...

  8. W英语: 紧急, 非紧急

    take your time 慢慢来 It is not urgent. Take it easy please. 不急,慢慢来.

  9. 基于visual Studio2013解决面试题之0510连续数之和

     题目

  10. redhat6.3+oracle11GR2 单库 安装规划

    oracle11g单实例安装+redhat6.3   规划 一.查看环境 [root@JSCS78DB dev]# cat /etc/redhat-release Red Hat Enterprise ...