C++特性三:多态---纯析构和纯虚析构
多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码 解决方式:将父类中的析构函数改为虚析构或者纯虚析构
虚析构和纯虚析构共性:
1.可以解决父类指针释放子类对象
2.都需要有具体的函数实现
虚析构和纯虚析构区别: 如果是纯虚析构,该类属于抽象类,无法实例化对象
虚析构语法: virtual ~类名(){}
纯虚析构语法:
virtual ~类名() = 0;
类名::~类名(){}
代码示例:
#include<iostream>
using namespace std;
#include<string>class Animal
{
public:Animal(){cout << "Animal的构造函数调用" << endl;}//利用虚析构可以解决 父类指针释放子类对象时不干净的问题/*virtual ~Animal(){cout << "Animal的虚析构函数调用" << endl;}*///纯虚析构 需要声明也需要实现 虚析构和纯虚析构只能有一个,故将上面注释//有了纯虚析构之后,这个类也属于抽象类,无法实例化对象virtual ~Animal() = 0;//纯虚函数virtual void speak() = 0;};Animal::~Animal()
{cout << "Animal的纯虚析构函数调用" << endl;
}class Cat :public Animal
{
public:Cat(string name){cout << "Cat构造函数调用" << endl;m_Name = new string(name);//堆区创建属性}virtual void speak(){cout << *m_Name<<"小猫在说话" << endl;}~Cat()//释放{if (m_Name != NULL){cout << "Cat析构函数调用" << endl;delete m_Name;m_Name = NULL;}}string *m_Name;
};void test()
{Animal* animal = new Cat("Tom");animal->speak();//父类指针在析构时候 不会调用子类中析构函数 导致子类如果有堆区属性 出现内存泄露delete animal;
}int main()
{test();return 0;
}
总结:
1.虚析构或纯虚析构都是用来解决通过父类指针释放子类对象
2.如果子类中没有堆区数据,可以不写为虚析构或纯虚析构
3.拥有纯虚析构函数的类也属于抽象类
相关文章:
C++特性三:多态---纯析构和纯虚析构
多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码 解决方式:将父类中的析构函数改为虚析构或者纯虚析构 虚析构和纯虚析构共性: 1.可以解决父类指针释放子类对象 2.都需要有具体的函数实现…...

创建可引导的 macOS 安装器
你可以将外置驱动器或备用宗卷用作安装 Mac 操作系统的启动磁盘。 以下高级步骤主要适用于系统管理员以及其他熟悉在“终端”中输入命令的经验丰富的用户。 升级 macOS 或重新安装 macOS 不需要可引导安装器,但如果你要在多台电脑上安装 macOS,而又不…...

ssm+vue的公廉租房维保系统(有报告)。Javaee项目,ssm vue前后端分离项目。
演示视频: ssmvue的公廉租房维保系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…...

【pycharm】作为Array查看出现数据无法显示问题(已解决)
【pycharm】作为Array查看出现数据无法显示问题(已解决) 当我们在调试代码的时候,需要对某个变量进行查看,就如同在matlab中,我们可以直接在工作区对某个变量进行双击查看矩阵变量的具体数值 在这里我遇到一个问题&am…...

matlab处理贝塞尔函数
说明:问题来自CSDN-问答板块,题主提问。 需求:在使用解析法求解电机的三维模型,编写程序时需要用到修正的贝塞尔函数,问题是在贝塞尔函数的自变量和阶数变化时函数值变化很大,导致最后求出来的气隙磁密非常大。 一、运行截图 二、解决代码...
【Python】Pycharm 的 python_stubs
Pycharm 的 python_stubs 问题 问题 Pycharm 为了对各种库暴露接口能在编码时提供快速的智能提示,会解析库并在 pycharm 安装目录的 python_stubs 下生成对应的存根,这个操作可以有效的提升 Pycharm 智能提示的效率。但是也有一个问题,称之为…...

AI大模型智能大气科学探索之:ChatGPT在大气科学领域建模、数据分析、可视化与资源评估中的高效应用及论文写作
本文深度探讨人工智能在大气科学中的应用,特别是如何结合最新AI模型与Python技术处理和分析气候数据。介绍包括GPT-4等先进AI工具,旨在帮助大家掌握这些工具的功能及应用范围。本文内容覆盖使用GPT处理数据、生成论文摘要、文献综述、技术方法分析等案例…...

rpc详解rpc框架
文章目录 概述rpc的优点组件工作流程&RPC的底层原理RPC的底层原理 RPC框架rpc框架优点RPC 的实现基础RPC的应用场景RPC使用了哪些关键技术rpc 调用异常一般怎么处理rpc和http的区别为什么RPC要比HTTP更快一些Dubbo和openfeign 区别远程调用RPC框架传输协议传输速度 概述 在…...

【评分标准】【网络系统管理】2019年全国职业技能大赛高职组计算机网络应用赛项H卷 无线网络勘测设计
第一部分:无线网络勘测设计评分标准 序号评分项评分细项评分点说明评分方式分值1点位设计图AP编号AP编号符合“AP型号位置编号”完全匹配5AP型号独立办公室、小型会议室选用WALL AP110完全匹配5员工寝室选用智分,其他用放装完全匹配5其它区域选用放装AP…...

停止docker 容器并删除对应镜像
docker 容器相关命令 docker ps 查看当前系统正在运行的容器情况,返回信息分别为: 容器ID:CONTAINER ID 镜像名IMAGE NAMES 运行命令COMMAND 创建时间CREATED 状态STATUS 映射端口 PORTS docker ps |grep XXX 可以…...
什么是服务器,有什么特性?
服务器是一种高性能计算机,作为网络的节点,存储、处理网络上80%的数据、信息,服务器作用比较广,网络游戏、网站、部分软件都是需要存到服务器的,还有一些企业会配服务器。今天,德迅云安全带您来…...
【Django】CORS跨域问题
通过 django-cors-headers 库来实现,此方法亲测有效 1、下载 pip install django-cors-headers2、修改 settings.py 配置文件 1)添加到应用列表 INSTALLED_APPS (##...corsheaders )2)添加到中间件列表 MIDDLEWARE [django.middleware.…...
npm 常用命令详解
npm,即 Node Package Manager,是 Node.js 的包管理器。它允许你安装、更新、删除和管理 Node.js 项目中的依赖包。在 Node.js 开发中,npm 的使用频率极高,掌握其常用命令对于开发者来说是至关重要的。本文将详细解释 npm 的常用命…...

外包干了14天,技术退步明显。。。
先说一下自己的情况,本科生,2019年我通过校招踏入了成都一家软件公司,开始了我的职业生涯。那时的我,满怀热血和憧憬,期待着在这个行业中闯出一片天地。然而,随着时间的推移,我发现自己逐渐陷入…...

RequestResponse使用
文章目录 一、Request&Response介绍二、Request 继承体系三、Request 获取请求数据1、获取请求数据方法(1)、请求行(2)、请求头(3)、请求体 2、通过方式获取请求参数3、IDEA模板创建Servlet4、请求参数…...
知名的CDN厂商CloudFlare简介
Cloudflare是一家总部位于美国的跨国科技公司,提供云端安全、性能优化以及内容交付网络(CDN)服务。通过其全球分布的服务器网络,Cloudflare帮助网站提高加载速度、保护免受恶意攻击,并提供安全可靠的云端解决方案。除此…...
C语言程序设计-谭浩强
文章目录 1 C语言2 算法3 顺序程序设计3.1 数据的表示形式3.2 输入和输出 4 选择程序结构5 循环程序结构6 数组7 函数模块化8 指针8.1 动态内存分配 9 结构类型9.1 链表9.2 共用体 union9.3 枚举 enum9.4 typedef 10 对文件的输入输出10.1 顺序读写10.2 随机读写 1 C语言 1.1 …...

将OpenCV与gdb驱动的IDE结合使用
返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV4.9.0开源计算机视觉库在 Linux 中安装 下一篇:将OpenCV与gcc和CMake结合使用 能力 这个漂亮的打印机可以显示元素类型、、标志is_continuous和is_subm…...

Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文+答辩PPT(附源代码+演示视频)
文章目录 前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、管理员功能模块2、用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文答…...

AI原生安全 亚信安全首个“人工智能安全实用手册”开放阅览
不断涌现的AI技术新应用和大模型技术革新,让我们感叹从没有像今天这样,离人工智能的未来如此之近。 追逐AI原生?企业组织基于并利用大模型技术探索和开发AI应用的无限可能,迎接生产与业务模式的全面的革新。 我们更应关心AI安全原…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...