当前位置: 首页 > news >正文

C++父类和子类指针的相互赋值和转换

1、指针或引用的 向上转换、向下转换

父类 到 子类 的转换是 向下转换
子类 到 父类 的转换是 向上转换

2、普通指针的转换

转换规则

向上转换 隐式地 进行,即,无需进行强制类型转换。
向下转换必须使用 dynamic_cast 进行强制类型转换。

转换细节

参考下面的博客。
从内存的角度剖析,转换后如何访问指针指向的成员。
代码实例展示不同转换之间的区别。
转换细则的总结

注意事项

  • 父类的指针不能赋值给子类的指针。但是通过强制类型转换,也可以将父类指针强制转换成子类指针后再赋值给子类指针。只是在这种情况下,程序员需要保证被转换的父类指针本来就指向一个子类的对象,这样才是安全的,否则很容易出错。
  • 指针调用的是父类方法 还是子类方法,看的是指针的类型,而不是指针所指对象的类型。
  • 虽然子类指针指向的是一个基类对象,但这并不影响子类成员变量的地址计算方式。

3、智能指针的转换

转换规则

向上转换可以隐式转换。
向下转换必须使用 dynamic_pointer_cast 进行转换。

相关文章:

  • 算法设计与分析————期末死亡冲刺
  • 现代软件工程————期末死亡冲刺
  • std::string::npos 常量解析
  • 练习4-3 求给定精度的简单交错序列部分和 (15 分)本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。
  • 浙大版《C语言程序设计(第4版)》题目集 练习4-6 猜数字游戏 (15 分)
  • 练习4-7 求e的近似值 (15 分)自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯ 来近似计算。本题要求对给定的非负整数 n,求该级数的前 n+1 项和。
  • 数组输入输出的方法
  • 习题:贴邮票
  • 习题:遍历搜寻
  • 习题:哥德巴赫猜想
  • 习题:数字拆分
  • 习题:质数统计
  • 商品管理系统超详细讲解
  • HTTP自学笔记
  • 手把手教你写贪吃蛇
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 77. Combinations
  • Android Volley源码解析
  • Angular4 模板式表单用法以及验证
  • HomeBrew常规使用教程
  • Javascript 原型链
  • Java面向对象及其三大特征
  • Js基础知识(四) - js运行原理与机制
  • js写一个简单的选项卡
  • leetcode386. Lexicographical Numbers
  • PHP CLI应用的调试原理
  • Promise初体验
  • 编写符合Python风格的对象
  • 浏览器缓存机制分析
  • 前端相关框架总和
  • 用Python写一份独特的元宵节祝福
  • 怎么把视频里的音乐提取出来
  • FaaS 的简单实践
  • 阿里云重庆大学大数据训练营落地分享
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #define,static,const,三种常量的区别
  • #QT(一种朴素的计算器实现方法)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (三) diretfbrc详解
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (五)Python 垃圾回收机制
  • (转)h264中avc和flv数据的解析
  • (转)Linq学习笔记
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .Net Core 中间件验签
  • .NET Framework与.NET Framework SDK有什么不同?
  • .net流程开发平台的一些难点(1)
  • .NET实现之(自动更新)
  • .Net小白的大学四年,内含面经