c++使用强制转换类型

news2024/9/23 5:34:57

对于c++中的强制转换,这里主要是讲解的是父类与子类之间的类型强制转换。对于以下的代码中,主要是父类Monkey和子类Man之间的成员函数的调用。

// 这是父类 
class Monkey { 
public: 
// 定义一个纯虚函数 
virtual void printFunc() { 
qDebug()<<"我是猴子类的输出"<<endl; 
  }
}; 
// 这是子类 
class Man:public Monkey { 
public: 
// 虚函数重写 
void printFunc() override 
{ 
qDebug()<<"我是人类的输出"<<endl; 
} 
// 独有的成员函数 
void Func1() 
{ 
qDebug() << "我是人类的独有的成员函数"<<endl; 
  } 
}; 
int main() 
{ 
Monkey* pman = new Man; 
pman->printFunc(); 
}

首先是在父类中声明了纯虚函数printFunc,在声明时前面加上virtual,代表是纯虚函数。而对于子类中同样有一个同名的方法printFunc,并且在后面加上了override,代表这是对父类的虚函数的重写,而在这个子类中还有一个自己所独有的成员函数。首先声明一个父类的指针,但是这个指针指向的是子类对象。使用这个指针来调用printFunc函数的话,调用的是子类的虚函数输出,所以输出如下:

添加图片注释,不超过 140 字(可选)

但是如果说想要使用这个指针对子类的独有的成员函数直接调用的话,这里就出现了问题,不能够直接调用子类的独有成员函数Func1,而想要使用这个指针来调用Func1的话,就需要使用到类型强制转换。

((Man*)pman)->Fucn1();

这样就可以调用到了Func1这个子类的独有成员函数,括号内就是为了将父类的指针强制转换为子类的指针。

添加图片注释,不超过 140 字(可选)

但是对于这个强制转换,需要注意其实这个办法是不安全的。所以要想解决这个问题,就需要使用dynamic_cast来进行类型转换。

Man *pointM = dynamic_cast<Man *>(pman);
 if(pointM) { 
qDebug()<<"安全调用下:" ;
pointM->Func1(); 
}

而这也解决了直接强制转换时的不安全问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1335561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

udp多播/组播那些事

多播与组播 多播&#xff08;multicast&#xff09;和组播&#xff08;groupcast&#xff09;是相同的概念&#xff0c;用于描述在网络中一对多的通信方式。在网络通信中&#xff0c;单播&#xff08;unicast&#xff09;是一对一的通信方式&#xff0c;广播&#xff08;broad…

智能优化算法应用:基于食肉植物算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于食肉植物算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于食肉植物算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.食肉植物算法4.实验参数设定5.算法结果6.…

算法学习系列(十一):KMP算法

目录 引言一、算法概念二、题目描述三、思路讲解三、代码实现四、测试 引言 这个KMP算法就是怎么说呢&#xff0c;就是不管算法竞赛还是找工作笔试面试&#xff0c;都是非常爱问爱考的&#xff0c;其实也是因为这个算法比较难懂&#xff0c;其实就是很难&#xff0c;所以非常个…

不同参数规模大语言模型在不同微调方法下所需要的显存总结

原文来自DataLearnerAI官方网站&#xff1a; 不同参数规模大语言模型在不同微调方法下所需要的显存总结 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051703254378255 大模型的微调是当前很多人都在做的事情。微调可以让大语言模型适应特定领域的任…

Vue在页面上添加水印

第一步&#xff1a;在自己的项目里创建一个js文件&#xff1b;如图所示我在在watermark文件中创建了一个名为waterMark.js文件。 waterMark.js /** 水印添加方法 */ let setWatermark (str1, str2) > {let id 1.23452384164.123412415if (document.getElementById(id) …

数据库01_增删改查

1、什么是数据&#xff1f;什么是数据库&#xff1f; 数据&#xff1a;描述事物的符号记录称为数据。数据是数据库中存储的基本对象。数据库&#xff1a;存放数据的仓库&#xff0c;数据库中可以保存文本型数据、二进制数据、多媒体数据等数据 2、数据库的发展 第一阶段&…

H266/VVC帧内预测编码技术概述

预测编码技术 预测编码&#xff08;Prediction Coding&#xff09;是指利用已编码的一个或多个样本值&#xff0c;根据某种模型或方法&#xff0c;对当前的样本值进行预测&#xff0c;并对样本真实值和预测值之间的差值进行编码。 视频中的每个像素看成一个信源符号&#xff…

MFC读取文件数据,添加信息到列表并保存到文件

打开并读取文件信息 添加&#xff1a; BOOL infoDlg::OnInitDialog() {CDialogEx::OnInitDialog();// TODO: 在此添加额外的初始化AfxMessageBox("欢迎查看学生信息");SetList();return TRUE; // return TRUE unless you set the focus to a control// 异常: OCX 属…

Node 源项目定制化、打包并使用全过程讲解

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是全栈工…

分布式面试题-理论部分(十二道)

文章目录 分布式面试题&#xff08;十二道&#xff09;分布式理论1. 说说CAP原理2. 为什么CAP不可兼得呢&#xff1f;3. CAP对应的模型和应用&#xff1f;4. BASE理论了解吗&#xff1f; 分布式锁5. 有哪些分布式锁的实现方案呢&#xff1f;**5.1 MySQL分布式锁如何实现呢&…

[2023-年度总结]凡是过往,皆为序章

原创/朱季谦 2023年12月初&#xff0c;傍晚&#xff0c;在深圳的小南山看了一场落日。 那晚我们坐在山顶的草地上&#xff0c;拍下了这张照片——仿佛在秋天的枝头上&#xff0c;结出一颗红透的夕阳。 这一天很快就会随着夜幕的降临&#xff0c;化作记忆的碎片&#xff0c;然…

PoE交换机传输距离是多少?100米?250米?

你们好&#xff0c;我的网工朋友。 今天和你聊聊PoE交换机&#xff0c;之前有系统地给你讲解过一篇&#xff0c;可以先回顾一下哈&#xff1a;《啥样的交换机才叫高级交换机&#xff1f;这张图告诉你》 为什么都说PoE交换机好&#xff1f;它最显著的特点就是&#xff1a; 可…

openGauss学习笔记-173 openGauss 数据库运维-备份与恢复-导入数据-对表执行VACUUM

文章目录 openGauss学习笔记-173 openGauss 数据库运维-备份与恢复-导入数据-对表执行VACUUM openGauss学习笔记-173 openGauss 数据库运维-备份与恢复-导入数据-对表执行VACUUM 如果导入过程中&#xff0c;进行了大量的更新或删除行时&#xff0c;应运行VACUUM FULL命令&…

【2024 行人重识别最新进展】ReID3D:首个关注激光雷达行人 ReID 的工作!

【2024 行人重识别最新进展】ReID3D&#xff1a;首个关注激光雷达行人 ReID 的工作&#xff01; 摘要&#xff1a;数据集&#xff1a;方法模型&#xff1a;多任务预训练&#xff1a;ReID Network&#xff1a; 实验结果&#xff1a;结论&#xff1a; 来源&#xff1a;Arxiv 2023…

Jenkins的特殊操作定时自动执行任务以及测试报告调优

java -Dhudson.model.DirectoryBrowserSupport.CSP -jar Jenkins.war 测试报告 不美丽 执行上面的代码 重启jenkins 就好了

Ensp dhcp全局地址池(配置命令 + 实例)

使用DHCP的好处&#xff1a;减少管理员的工作量、避免输入错误的可能、避免ip冲突 DHCP报文类型&#xff1a; DHCP DISCOVER:客户端用来寻找DHCP服务器 DHCP OFFER:DHCP服务器用来响应DHCP DISCOVER报文&#xff0c;此报文携带了各种配置信息 DHCP REQUEST:客户端配置请求确…

8+WGCNA+免疫+实验,干湿结合的经典生信思路,可冲

今天给同学们分享一篇生信文章“Identifying the key genes of Epstein-Barr virus-regulated tumour immune microenvironment of gastric carcinomas”&#xff0c;这篇文章发表在Cell Prolif期刊上&#xff0c;影响因子为8.5。 结果解读&#xff1a; EBV感染改变了胃癌中的…

【Java注解的作用是什么?】

&#x1f341;Java注解的作用是什么&#xff1f; &#x1f341;典型解析&#x1f341;扩展知识仓&#x1f341;什么是元注解&#x1f341;Retention&#x1f341;Target&#x1f341;Documented&#x1f341;Inherited &#x1f341;典型解析 Java 注解用于为 Java 代码提供元数…

【DataGrip使用小技巧】2

【技巧1】要将活动编辑器与剪贴板内容进行比较&#xff0c;请右键单击编辑器中的任意位置&#xff0c;然后从上下文菜单中选择compare with Clipboard. 如图所示 剪贴板和编辑器的比较一目了然 【技巧2】若要创建表的备份副本&#xff0c;请将表拖到数据库树视图中同一数据源的…

AI项目十九:YOLOV8实现目标追踪

若该文为原创文章&#xff0c;转载请注明原文出处。 主要是学习一下实现目标追踪的原理&#xff0c;并测试一下效果。 目的是通过YOLOV8实现人员检测&#xff0c;并实现人员追踪&#xff0c;没个人员给分配一个ID&#xff0c;实现追踪的效果。 也可以统计人数。在小区办公楼…