说简单的就是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);的更多相关文章

  1. void die(const char *msg)

    void die(const char *msg) { perror(msg); exit(errno); }

  2. c++强制类型转换(static_cast,const_cast,dynamic_cast,reinterpret_cast)

    static_cast <typeid>(exdlvssion) static_cast 很像 C 语言中的旧式类型转换.它能进行基础类型之间的转换,也能将带有可被单参调用的构造函数或用户 ...

  3. C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast

    1. c强制转换与c++强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2 ...

  4. 读书笔记_Effective_C++_条款三:尽可能使用const

    const是常量的意思,它可以定义一个不可改变的量,主要用于以下几个地方: 1. 修饰变量,使之不可改变 举个例子: const int var = 3; 此时var的值就不能改变了.也正是因为con ...

  5. c++ static_cast和dynamic_cast详解

    注:从图中可以看出,派生类不仅有自己的方法和属性,同时它还包括从父类继承来的方法和属性.当我们从派生类向基类转换时,不管用传统的c语言还是c++转换方式都可以百分百转换成功.但是可怕是向下转换类型,也 ...

  6. C++ activemq CMS 学习笔记.

    很早前就仓促的接触过activemq,但当时太赶时间.后面发现activemq 需要了解的东西实在是太多了. 关于activemq 一直想起一遍文章.但也一直缺少自己的见解.或许是网上这些文章太多了. ...

  7. C++编程思想重点笔记(下)

    上篇请看:C++编程思想重点笔记(上) 宏的好处与坏处 宏的好处:#与##的使用 三个有用的特征:字符串定义.字符串串联和标志粘贴. 字符串定义的完成是用#指示,它容许设一个标识符并把它转化为字符串, ...

  8. JMS ActiveMQ研究文档

    1. 背景 当前,CORBA.DCOM.RMI等RPC中间件技术已广泛应用于各个领域.但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务 ...

  9. octomap中3d-rrt路径规划

    路径规划 碰撞冲突检测 在octomap中制定起止点,目标点,使用rrt规划一条路径出来,没有运动学,动力学的限制,只要能避开障碍物. 效果如下: #include "ros/ros.h&q ...

随机推荐

  1. [POJ1160] Post Office [四边形不等式dp]

    题面: 传送门 思路: dp方程实际上很好想 设$dp\left[i\right]\left[j\right]$表示前$j$个镇子设立$i$个邮局的最小花费 然后状态转移: $dp\left[i\ri ...

  2. U盘用FAT32还是用NTFS格式好

    U盘用FAT32还是用NTFS格式好 ● FAT32文件系统 FAT32使用4个字节(也就是32位)的空间来表示每个扇区(Sector)配置文件的情形,故称之为FAT32.FAT16的分区容量上限是2 ...

  3. DFA Minimization

    有点晚了我就不调试了..不过说是这么说我还是过了编译的.. #include<bits/stdc++.h> using namespace std; namespace DFA{ cons ...

  4. IDEA 注册问题,创建 和 删除项目

    目录 .....2016.3/2017.1 IDEA 注册码 .....IDEA 创建项目 .....IDEA 删除项目 IDEA 注册码 复制使用别人的注册码,启动选择如下: 复制粘贴如下代码: 这 ...

  5. 2017-2018-2 20179204 PYTHON黑帽子 黑客与渗透测试编程之道

    python代码见码云:20179204_gege 参考博客Python黑帽子--黑客与渗透测试编程之道.关于<Python黑帽子:黑客与渗透测试编程之道>的学习笔记 第2章 网络基础 t ...

  6. *LOJ#2306. 「NOI2017」蔬菜

    $n \leq 100000$种蔬菜,每个蔬菜有:一单位价格:卖第一单位时额外价格:总量:每天腐烂量.每天能卖$m \leq 10$单位蔬菜,多次询问:前$k \leq 100000$天最多收入多少. ...

  7. MySQL数据库”mysql SQL Error:1146,SQLState:42S02 “解决方法

    项目在开发的时候在Mac平台下开发的,开发完了之后在LINUX环境上部署好之后,运行时MySQL数据库报错,提示为某个表不存在之类的错误信息,后来修改了MySQL的配置文件将大小写敏感去掉,问题解决. ...

  8. 让你的man手册显示与众不同

    在~/.bashrc中加入如下代码: export LESS_TERMCAP_mb=$'\E[01;31m' export LESS_TERMCAP_md=$'\E[01;31m' export LE ...

  9. IDEA - 设置所有文件编码为UTF-8格式

    问题一: File->Settings->Editor->File Encodings 问题二: File->Other Settings->Default Settin ...

  10. HDU 4343 Interval query(贪心 + 倍增)

    题目链接  2012多校5 Problem D 题意  给定$n$个区间,数字范围在$[0, 10^{9}]$之间,保证左端点严格大于右端点. 然后有$m$个询问,每个询问也为一个区间,数字范围在$[ ...