static_cast关键字(编译时类型检查)

代码如下:

#include <iostream>
using namespace std; class Base{
public :Base(const int baseData){m_baseData = baseData;}void print()const{cout << "m_baseData is " << m_baseData << endl;}
private:int m_baseData;
};class Upgrade :public Base{
public:Upgrade(const int upgradeData) :Base(upgradeData){m_upgradeData = upgradeData;}void setGradeData(const int &data){m_upgradeData = data;}void print()const{cout << "m_upgradeData is " << m_upgradeData << endl;}
private:int m_upgradeData;
};int main(){double double_1 = 100.0001;int a = static_cast<int>(double_1);cout << "double_1 is " << double_1 << endl;cout << "a is " << a << endl;Base *base = new Base(100);cout << "base print:";base->print();Upgrade *upgrade = new Upgrade(101);cout << "upgrade print:";upgrade->print();Base *castBase1 = static_cast<Base*>(upgrade);cout << "castBase1 print:";castBase1->print();Upgrade *caseUpgrade1 = static_cast<Upgrade*>(upgrade);cout << "caseUpgrade1 print:";caseUpgrade1->print();Upgrade *caseUpgrade2 = static_cast<Upgrade*>(base);cout << "caseUpgrade2 print:";caseUpgrade2->print();Upgrade *caseUpgrade3 = (Upgrade*)base;cout << "caseUpgrade3 print:";caseUpgrade3->print();cout << "sizeof(*caseUpgrade3):" << sizeof(*caseUpgrade3) << endl;caseUpgrade3->setGradeData(1);cout << "sizeof(*caseUpgrade3):" << sizeof(*caseUpgrade3) << endl;Base *base_base = upgrade;cout << "base_base print:";base_base->print();delete upgrade;//delete base;getchar();return 0;
}

运行截图如下:

这里就提一点:

Upgrade *caseUpgrade3 = (Upgrade*)base;cout << "caseUpgrade3 print:";caseUpgrade3->print();cout << "sizeof(*caseUpgrade3):" << sizeof(*caseUpgrade3) << endl;caseUpgrade3->setGradeData(1);cout << "sizeof(*caseUpgrade3):" << sizeof(*caseUpgrade3) << endl;Base *base_base = upgrade;cout << "base_base print:";base_base->print();delete upgrade;//delete base;

这里把子类指针强指到了父类,并且还修改了子类的值,这真是个骚包的操作!!!

我的电脑是小端系统。

但是不能对base进行析构,会报如下的错误。

delete base;

原因是:分配了len长度的空间,却用到了len + 1的长度,释放的时候就报错了

C++工作笔记-对static_cast的进一步认识(强制转换改变内存,并且删除存在的问题)相关推荐

  1. Java工作笔记-对反射的进一步理解

    目录 基本概念 代码与实例 基本概念 反射的进一步理解: 将类的各个组成部分封装为其他对象(将一个类的组成部分封装为其他对象) 就是反射. Java代码经历的三个阶段: 1. 写好代码.java后使用 ...

  2. C++工作笔记-对继承的进一步认识

    这篇博文将说明我对继承的进一步理解. 比如在图形碰撞的时候,如果能让他继承一个类,那个类设置一个flag,就可以对不同的图形进行不同的碰撞分析,那么这里就可以用父类指针,去指向子类,然后读取子类里面和 ...

  3. Qt工作笔记-对setupUi(this)进一步理解

    今天工作中,在构造函数中忘记了调用setupUi,使得程序中某些指针异常. 如下图的程序,当什么不做的时候,界面是这样的: 当把ui->setupUi(this)注释掉后 这里先看下setupU ...

  4. C++工作笔记-对全局变量的进一步认识(何时适合用,何时不适合用)

    关于全局变量的好处,和坏处,在此不说了,还没毕业的大学生基本上对全局变量都有认识. 在此,我只记录下今天的感悟!!! 首先来看一个程序: 这里面有2个QLineEdit,一个QLineEdit一秒+1 ...

  5. Qt工作笔记-对QImage的进一步认识(关于α通道)

    一般的点阵图BMP图,是没有α通道的,如下图所示: 而在写OpenGL的程序时候,往往要得到图像的数据位的数据,不用框架,使用FILE很容易就可以获取图像的数据, 如下图: 但用框架将更为方便: 代码 ...

  6. Qt工作笔记-对QXmlStreamReader的进一步认识(读取XML)

    代码如下: #include <QApplication> #include <QDebug> #include <QFile> #include <QVec ...

  7. C++工作笔记-stl中map基础用法(插入,遍历,删除)

    在最近一直在阅读xx项目,看到里面用到了map,读大学期间基本上从来没用到过这种stl(大学就用了Vector和list).下面对map敲如下代码: 运行截图如下: 代码如下: #include &l ...

  8. 罗辑思维在全链路压测方面的实践和工作笔记

    业务的知名度越高,其背后技术团队承受的压力就越大.一旦出现技术问题,就有可能被放大,尤其是当服务的是对知识获取体验要求颇高的用户群体. 提供知识服务的罗辑思维主张"省时间的获取知识" ...

  9. 系统架构工作笔记-数据展示进程与读取数据进程分离,实现低耦合(展示软件可适用任意厂家数据库)

    目录 背景 实践环境 逻辑结构图 运行截图 数据展示进程源码 服务进程(插件调用)源码 插件源码 MySQL相关 背景 工作一年零1个月了(加上实习),靠着工作中学到的东西,花了周末2天时间,做了一个 ...

最新文章

  1. Win32 结构化异常处理(SEH)探秘【下篇】
  2. matlab在图片上显示文字颜色,科学网-解决matlab saveas printf保存图片时 colorbar中的字体颜色发生改变-肖鑫的博文...
  3. c++类与类的组合关系(Combination)关系
  4. C语言函数调用的原理
  5. python中文相似度_python比较两个文本的相似性
  6. JavaParser使用指南
  7. VUE中使用Echarts图表
  8. NotifyIcon控件的使用
  9. 中国外显子组测序行业市场供需与战略研究报告
  10. 直接管理和维护计算机系统的程序称为,全国2008年04月自学考试计算机原理试题及答案.doc...
  11. 人脸识别:Contrastive loss和梯度推到
  12. 计算机基础知识好学吗,计算机编程好学吗 需要什么基础知识?
  13. 人生苦短,快学python(python可以做什么)
  14. 线性代数回顾——协方差与逆矩阵
  15. HTML中table表格的常用标签及属性
  16. springboot整合dubbo设置全局唯一ID进行日志追踪
  17. 如何快速有效玩弄乙方?
  18. 路标识别 matlab 聚类算法,基于卷积神经网络的交通路标检测v1.doc
  19. 我的第一篇文章,doc命令
  20. 阿里云【7天实践训练营】进阶路线——Day2:阿里云云计算助理工程师认证(ACA)课程1 ~ 2章

热门文章

  1. 内推学弟进了腾讯,看看他的标杆简历!
  2. 新手必备: win10 系统下 VSCode+CMake+Clang+GCC 环境的搭建!
  3. 女大学生毕业相亲程序员,吃了一顿大排档,一看车钥匙后犹豫了!
  4. 哈老师一到的飞鸽传书
  5. 局域网聊天软件源码解析
  6. 今天,终于又有时间更新飞鸽传书了。
  7. 飞鸽传书2007绿色版的发展
  8. python while循环if_python – 使用if语句时陷入while循环
  9. mysql java 获取周_Java中获取Mysql中datetime类型的数据
  10. ROS----小乌龟之你追我赶