[015]向下类型转换和向上类型转换

1.定义

向下类型转换:从父类转换为子类

向上类型转换:从子类转换为父类

2.区别和危险性

1)一般来讲,向上类型转换都是安全的,例如:

Base base;

Device dev;

base = dev;    ←向上数据转换

2)向下类型转换是危险的,因为子类可能存在一些父类其他不存在的个性(增加了成员变量和函数)。例如:

dev = base;    ←向下数据转换

更有可能产生切片问题,为了避免这种情况,我们可以使用dynamic_cast来继续进行向下类型转换。

Device *dev = dynamic_cast<Devece *>base;    ←向下数据转换

尽管如此,还是可能出现失败的情况,因此不推荐向下类型转换。

时间: 2024-10-09 09:25:21

[015]向下类型转换和向上类型转换的相关文章

C++中的向上类型转换和向下类型转换+四种强制类型转换

转自博客:http://blog.csdn.net/wangweitingaabbcc/article/details/7720979# 在c++的世界中有这样两个概念,向上类型转换,向下类型转换,分别描述的是子类向基类,和基类向子类的强制类型转换. 向上强制类型转换 切割:覆盖方法和子类数据丢失的现象生成切割(slice) class Base { public: int b; virtual void Test() { cout << "base" <<en

C++中的向上类型转换和向下类型转换

在c++的世界中有这样两个概念,向上类型转换,向下类型转换,分别描述的是子类向基类,和基类向子类的强制类型转换. 向上强制类型转换 切割:覆盖方法和子类数据丢失的现象生成切割(slice) [cpp] view plain copy class Base { public: int b; virtual void Test() { cout << "base" <<endl; } }; class Derived:public Base { public: in

C++的继承关于向上类型转换

对于一个类比如马类来说可以分为很多比如千里马等等的对象,比如千里马有时候也可以作为一个类假如说是千里马类下的黑马,它是千里马的一个对象,所以它也是马,所以说它也是马的对象,这就是派生类的对象也是基类的对象,但是反过来不能说马是黑马的对象,所以计算机科学中所有都是在描述现实生活中的实物之间的关系(哈哈 我又感慨了一下) 下来看几个例子 enum note{middleC,Csharp,Cflat}; class Instrument { public: void play(note )const

muduo Dispatcher消息分发器 通过多态和模板进行向上类型转换

所谓消息分发(muduo 中,就是接收到buffer之后,额,或者说是 protobuf),在简单的程序设计里面的话,估计就是 type-switch 了,但是这样的话,肯定就不好扩展维护啦. 最后的方法就是,可以根据 type-name 自动去调用相应的方法. typedef boost::function<void (Message*)> ProtobufMessageCallback; 这个算是一个映射咯.muduo 中采用的是 map<Descriptor*,ProtobufMe

自动类型转换、强制类型转换、作用域、整型表数范围

一.变量的作用域 测试代码: public class Test1 { private static int value = 1; // 全局变量 private static int temp = 0; // 全局变量 public static void main(String[] args) { int value = 2; // 局域变量覆盖全局变量 System.out.println(value); // 输出的是局域变量,全局变量被屏蔽 System.out.println(tem

智能手机的折戟战:小米魅族向下、荣耀向上

2017年京东的618战报已出炉多日. 明星一般的小米除抢得一个总销量的占位之外,其他座次排名方面并未有亮眼成绩,而时常被冠之予梦想与体验的魅族,此次的上榜频率与其发布会热度形成了鲜明的反比关系,联想等老牌厂商更是已经销声匿迹再不见踪影.在这片榜单中,唯一能让人印象深刻的变化有两点:一是360.锤子和美图等并不为人看好的手机品牌意外地入榜,另外则是荣耀以磅礴之势几近碾压整个手机品牌--今年的618电商节中,荣耀以独立身份斩获中国手机品牌销售额第一. 而这,仅仅只是一个节点而已. "互联网思维&q

数据类型转换之自动类型转换

当数据类型不一样时,将会发生数据类型转换. 自动类型转换(隐式) 1. 特点:代码不需要进行特殊处理,自动完成. 2. 规则:数据范围从小到大. 强制类型转换(显式) 一.自动类型转换代码 1 public class Demo01DataType { 2 public static void main(String[] args) { 3 System.out.println(1024); // 这就是一个整数,默认就是int类型 4 System.out.println(3.14); //

[原创]java WEB学习笔记67:Struts2 学习之路-- 类型转换概述, 类型转换错误修改,如何自定义类型转换器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

100.类型转换以及类类型转换

1 #define _CRT_SECURE_NO_WARNINGS 2 #include <iostream> 3 using namespace std; 4 5 class myclass 6 { 7 public: 8 int x; 9 int y; 10 11 myclass() 12 { 13 14 } 15 //赋值初始化 16 //加上explicit表示不能调用隐式的转换 17 explicit myclass(int a) :x(a), y(a) 18 { 19 cout &