C++基础——C++风格的类型转换(static_cast、const_cast、dynamic_cast、reinterpret_cast)

只有再做向上转型(upcast)的动作时,才存在对象切割(object slicing),子类的内存空间显然要大于父类的嘛,切割即是保留从父类继承而来的,切除子类所独有的。

  • (1)object slicing 对象切割是向上转型(转换为父类)
  • (2)dynamic_cast<子类指针/子类引用> 是向下转型(转换为子类指针或子类引用)
#include <iostream>
using namespace std;class CDocument
{
public:void func(){cout << "CDocument::func() " << endl;Serialize();}virtual void Serialize(){cout << "CDocument::Serialize()" << endl;}
};class CMyDocument:public CDocument
{
public:virtual void Serialize(){cout << "CMyDocument::Serialize()" << endl;}
};int main(int, char**)
{CMyDocument myDoc;((CDocument*)&myDoc)->func();// 基类指针指向派生类对象// 不是向上转型cout << "==================================" << endl;((CDocument)myDoc).func();// myDoc 对象强转为 CDocument,向上转型,// 派生类的特有成员会丢失// 完完全全将派生类对象转换类基类对象(将派生类对象拷贝构造为基类对象)// dynamic_cast<>();return 0;
}

运行结果如下:

CDocument::func()
CMyDocument::Serialize()
==================================
CDocument::func()
CDocument::Serialize()

C++ 进阶——object slicing 与虚函数与dynamic_cast相关推荐

  1. C++ 虚函数在基类与派生类对象间的表现及其分析

    近来看了侯捷的<深入浅出MFC>,读到C++重要性质中的虚函数与多态那部分内容时,顿时有了疑惑.因为书中说了这么一句:使用"基类之指针"指向"派生类之对象&q ...

  2. 图解C++虚函数 虚函数表

    图解C++虚函数 2016年07月02日 17:47:17 海枫 阅读数:5181 标签: 虚函数c++g++对象模型C++虚函数更多 个人分类: C/C++/linux 版权声明:本文为博主原创文章 ...

  3. C/C++编程:虚函数与纯虚函数

    虚函数 VS 纯虚函数 虚函数 虚函数是应在派生类中重新定义的函数.当使用指针或者对基类的引用来引用派生类的对象时,可以为该对象调用虚函数并执行该派生类的版本. 虚函数的"虚",虚 ...

  4. python虚函数_Python进阶话题杂谈(十三)纯虚函数与抽象基类

    纯虚函数与抽象类都是Python面向对象中重要的编程范式,用于对继承类做强制性接口实现约定. abc模块包含了一系列与抽象基类与纯虚函数相关的方法.Python中通过修改元类进行抽象基类的设定.这里P ...

  5. C++编程进阶5(内联函数、如何降低编译成本、处理继承体系中同名不同参的成员函数、私有虚函数)

    十七.内联函数 在https://blog.csdn.net/Master_Cui/article/details/106391552中,已经简单的说过内联函数的作用. 函数体较小的内联函数经过编译后 ...

  6. (一图胜千言)虚函数实现机制(Vptr, Vtbl)

    1. 摘要 讲解C++中虚函数的实现机制,主要是Vptr和Vtbl的讲解,有了虚函数才可以拥有像多态这种强大的功能. 虚函数主要是出现在类的继承体系中. 2.虚指针vptr和虚表vtbl 虚指针及虚表 ...

  7. 对象切片(object slicing)和多态

    在函数传参处理多态性时,如果一个派生类对象在UpCasting时,用的是传值的方式,而不是指针和引用,那么,这个派生类对象在UpCasting以后,将会被slice成基类对象.https://www. ...

  8. 透过汇编另眼看世界之多继承下的虚函数函数调用

    在我的前一篇文章"透过汇编另眼看世界之函数调用"中,我们通过汇编了解了虚函数调用的全部过程.在本文中我将分析多继承的情况下虚函数调用的情况. 首先还是写一些简单的代码作为本文分析的 ...

  9. C#中控件Control的Paint事件和OnPaint虚函数的区别

    句柄 : 句柄,是整个Windows编程的基础.一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按 ...

最新文章

  1. java中实现选择文件_Java 实现文件选择对话框及功能
  2. php mysql execute语法_PHP PDOStatement::execute讲解
  3. Go 语言编程 — gormigrate GORM 的数据库迁移助手
  4. ascii码对照表十六进制_ASCII
  5. 岳阳师范学院计算机系刘威,计算机学院青年教师刘威博士发表高水平科研论文...
  6. 命令行启动Angular应用
  7. pt100温度传感器c语言,pt100测温程序-LCD1602
  8. 项目管理--项目整合管理
  9. es6 async函数的实现原理
  10. c语言和python的堆栈,python - 在C ++中更快地执行两个程序的可能解释(与Python比较)? - 堆栈内存溢出...
  11. 已处理证书链,但是在不受信任提供程序信任的根证书中终止 - Windows 7安装.Net Framework 4.7.2时出现此问题
  12. 关于 WMV、WMA、ASF、ASX 等格式和 Windows Media Player 的说明
  13. oracle 验证 lob 坏块,Oracle LOB坏块处理
  14. java计算机毕业设计共享充电宝管理系统演示录像2021源码+mysql数据库+系统+lw文档+部署
  15. android通过webview调起支付宝app支付
  16. android os包含那些,os是什么意思(os的基本类型包括哪三种)
  17. 在 Linux安装Dataiku DSS步骤
  18. 计算机病毒是可以自我繁殖的特殊程序,计算机基础试题及答案
  19. TSCLIB.DLL函数库使用说明
  20. SAP中Quant份的理论及应用解析

热门文章

  1. Maven的性质与部署整理
  2. python or 运算符 用作判断两变量的真假
  3. //变量在scala中没有自增自减的操作
  4. Pytorch专题实战——前馈神经网络(Feed-Forward Neural Network)
  5. Qt总结之十一:内存泄漏(汇总)
  6. redis源码剖析(3):基础数据结构dict
  7. 相关不是因果,哪又是啥?
  8. 数据迁移的应用场景与解决方案Hamal
  9. Network 第九篇 - 双机热备-HSRP
  10. TSP旅行商问题的Hopfield求解过程