dynamic_cast<const ObjectList&>(msg);
说简单的就是C里面的强制类型转换,只不过C++里面为了类型安全而这么做的。主要用于 基类与继承类之间。
C写多了,类型一般都强转,特别是指针。
int * a;
void * b = (void*)a;
char * c = (char*)b;
C++里的_cast结尾的还有另外两个,就是干类似活的,据说是为了类型安全,某些条件下会转换失败。
eg:
dynamic_cast
用于多态性的父子类型对象的指针或引用之间。
class A {
public:
virtual ~A (void) {}
};
class B : public A {};
class C : public B {};
int main (void) {
B b;
A* pa = &b;
cout << "pa = " << pa << endl;
cout << "---- dynamic_cast ----" << endl;
// pa实际指向B对象,转换成功
B* pb = dynamic_cast<B*> (pa);
cout << "pb = " << pb << endl;
// pa没有指向C对象,转换失败
C* pc = dynamic_cast<C*> (pa);
cout << "pc = " << pc << endl;//这里应该pc=NULL
} 子类好比是父类的一个扩展,就像儿子拥有父亲的一些特征一样,当父亲需要输血的时候,同样可以使用儿子的血。 子类转换为父类是安全的,父类就不能直接转换为子类,因为子类有的东西可能父类没有。 系统在实现的时候,其实是为每一个类提供了一个方法表,这个表中等级了该类的所有的方法(C++不是全部,仅仅登记是虚拟方法),当对象调用方法是就从这个表中去查找,如果找到就执行,如果没有就到父类查找,以此类推;这样以来,子类就继承了全部的父类的方法;当你将子类对象转换为父类的对象时,那么该对象调用方发誓就只父类方法表开始查找,因此没有办法调用子类的方法;但是对于子类来说,方法依然存在;当你声明回子类时,方法自然就可以使用了。
dynamic_cast<const ObjectList&>(msg);的更多相关文章
- void die(const char *msg)
void die(const char *msg) { perror(msg); exit(errno); }
- c++强制类型转换(static_cast,const_cast,dynamic_cast,reinterpret_cast)
static_cast <typeid>(exdlvssion) static_cast 很像 C 语言中的旧式类型转换.它能进行基础类型之间的转换,也能将带有可被单参调用的构造函数或用户 ...
- C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
1. c强制转换与c++强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2 ...
- 读书笔记_Effective_C++_条款三:尽可能使用const
const是常量的意思,它可以定义一个不可改变的量,主要用于以下几个地方: 1. 修饰变量,使之不可改变 举个例子: const int var = 3; 此时var的值就不能改变了.也正是因为con ...
- c++ static_cast和dynamic_cast详解
注:从图中可以看出,派生类不仅有自己的方法和属性,同时它还包括从父类继承来的方法和属性.当我们从派生类向基类转换时,不管用传统的c语言还是c++转换方式都可以百分百转换成功.但是可怕是向下转换类型,也 ...
- C++ activemq CMS 学习笔记.
很早前就仓促的接触过activemq,但当时太赶时间.后面发现activemq 需要了解的东西实在是太多了. 关于activemq 一直想起一遍文章.但也一直缺少自己的见解.或许是网上这些文章太多了. ...
- C++编程思想重点笔记(下)
上篇请看:C++编程思想重点笔记(上) 宏的好处与坏处 宏的好处:#与##的使用 三个有用的特征:字符串定义.字符串串联和标志粘贴. 字符串定义的完成是用#指示,它容许设一个标识符并把它转化为字符串, ...
- JMS ActiveMQ研究文档
1. 背景 当前,CORBA.DCOM.RMI等RPC中间件技术已广泛应用于各个领域.但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务 ...
- octomap中3d-rrt路径规划
路径规划 碰撞冲突检测 在octomap中制定起止点,目标点,使用rrt规划一条路径出来,没有运动学,动力学的限制,只要能避开障碍物. 效果如下: #include "ros/ros.h&q ...
随机推荐
- 洛谷4438 [Hnoi2018]道路 【树形dp】
题目 题目太长懒得打 题解 HNOI2018惊现普及+/提高? 由最长路径很短,设\(f[i][x][y]\)表示\(i\)号点到根有\(x\)条未修公路,\(y\)条未修铁路,子树所有乡村不便利值的 ...
- Secure services with TLS ---Docker配置https
官方文档:https://docs.docker.com/ee/ucp/interlock/usage/tls/
- 洛谷 P1262 间谍网络==Codevs 4093 EZ的间谍网络
4093 EZ的间谍网络 时间限制: 10 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B ...
- updatepanel的使用【他人经验+原创 完整例子】
原文发布时间为:2009-05-16 -- 来源于本人的百度文章 [由搬家工具导入] 刚上传的代码,不知道能不能下载:[源码包含所有ajax控件的简单使用] http://www.xmaspx.com ...
- bzoj 2115 [Wc2011] Xor 路径最大异或和 线性基
题目链接 题意 给定一个 \(n(n\le 50000)\) 个点 \(m(m\le 100000)\) 条边的无向图,每条边上有一个权值.请你求一条从 \(1\)到\(n\)的路径,使得路径上的边的 ...
- Hibernate更新某些字段的几种update方法
Hibernate 中如果直接使用 Session.update(Object o); 会把这个表中的所有字段更新一遍. 比如: public class TeacherTest { @Test pu ...
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---10
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- LeetCode OJ-- Jump Game II **
https://oj.leetcode.com/problems/jump-game-ii/ 给一个数列,每次可以跳相应位置上的步数,问跳到最后位置至少用几步. 动态规划: j[pos]表示从0到po ...
- springBoot yml 和 properties
加载顺序不一致,application.yml 在前,application.properties 在后. yml 文件内容 server: port: 8081 spring: redis: dat ...
- 基于 OpenResty 的动态服务路由方案
2019 年 5 月 11 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙武汉站,又拍云首席布道师在活动上做了< 基于 OpenResty ...