C++继承与派生——(6)派生类的析构函数

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
站在巨人的肩上,是为了超过巨人!

一起加油!

        基类的析构函数也不能被派生类继承。派生类对象生存期结束时,需要调用析构函数完成对象清理工作,因此派生类需要定义自己的析构函数。由于派生类继承了基类的成员,基类成员的清理工作应该由基类的析构函完成。因此,编译系统在对派生类对象进行析构时,首先会调用派生类自身的析构函数对派生类自己添加的成员进行清理,然后再调用基类的析构函数,对从基类继承过来的成员进行清理,这种调用是由系统自动完成的。由于析构函数没有参数,因此派生类析构函数的形式非常简单。
        析构函数的调用顺序是: 先调用派生类自己的析构函数,再调用对象成员类的析构函数(如果派生类中有对象成员),最后调用基类的析构函数,其调用顺序与调用构造函数的顺序刚好相反。

例:派生类析构函数示例。

#include<iostream>
using namespace std;
#include<cstring>
class Person{public:Person(char *pName,int pAge,char pSex){name=new char[strlen(pName+1)];strcpy(name,pName);age=pAge;sex=pSex;}~Person(){cout<<"Destruct Person"<<endl;delete[]name;}char *GetName(){return name;}int GetAge(){return age;}char GetSex(){return sex;}void print(){cout<<"姓名:"<<name<<endl;cout<<"年龄:"<<age<<endl;cout<<"性别:"<<sex<<endl;}private:char *name;int age;char sex;
}; 
class Student:public Person{public:Student(char*pName,int pAge,char pSex,char *pID,double pScore):Person(pName,pAge,pSex){ID=new char[strlen(pID+1)];strcpy(ID,pID);score=pScore;}~Student(){delete[]ID;cout<<"Destruct Student"<<endl;}char *GetID(){return ID;}double GetScore(){return score;}void print(){Person::print();cout<<"学号:"<<ID<<endl;cout<<"分数:"<<score<<endl;}private:char *ID;double score;
};
int main(){Student s("李华",18,'F',"20230011",95);s.print();return 0;
}

说明:

        在程序即将运行完毕时,s 的生存期即将结束,系统自动调用 s 的析构函数~Student()。由于类 Student 是派生类,所以在执行完派生类的析构函数之后,系统会去执行其基类的析构函数~Person()。因此,程序先输出“Destruct Student”,再输出“Destruct
Person”。

        以上就是我对C++继承与派生——(6)派生类的析构函数的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++继承与派生的理解,请持续关注我哦!!! 

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

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

相关文章

说一下数据库的事务隔离?

说一下数据库的事务隔离&#xff1f; 数据库事务隔离是指在多个事务同时并发执行的情况下&#xff0c;系统确保各个事务相互之间是隔离的&#xff0c;一个事务的执行不会影响其他事务的执行。SQL 标准定义了四个隔离级别&#xff0c;分别是读未提交&#xff08;Read Uncommitt…

14-网络安全框架及模型-分层防护模型

目录 分层防护模型 1 背景概述 2 主要内容 3 保护层次 4 优势和局限性 5 应用场景 分层防护模型 1 背景概述 分层防护模型是一种网络安全架构&#xff0c;旨在通过将保护对象划分为不同的层次&#xff0c;并为每个层次部署相应的安全措施&#xff0c;提供多层次、全面的…

社群管理助手的角色与价值

在数字化时代&#xff0c;社群管理已成为企业和组织成功的关键因素之一。社群管理助手&#xff0c;作为这一领域的专业人士&#xff0c;承担着推动社群发展、增强用户黏性、提升品牌影响力等多重任务。本文将深入探讨社群管理助手的角色定位、核心职责以及如何提升其专业能力。…

关于Omlox定位标准(一)——omlox hub

关于Omlox定位标准 Omlox是世界上第一个开放的定位标准&#xff0c;旨在实现灵活的实时定位解决方案&#xff0c;&#xff0c;可以使用来自各个制造商的单元。“omlox"一词源自拉丁词汇"omni”&#xff08;无处不在&#xff09;和"locus"&#xff08;位置…

7天玩转 Golang 标准库之 http/net

在构建web应用时&#xff0c;我们经常需要处理HTTP请求、做网页抓取或者搭建web服务器等任务&#xff0c;而Go语言在这方面为我们提供了强大的内置工具&#xff1a;net/http标准库&#xff0c;它为我们操作和处理HTTP协议提供了便利。 基础用法 一&#xff1a;处理HTTP请求 首…

18国签署,全球首份《安全AI系统开发指南》发布

内容概述&#xff1a; 2023年11月27日&#xff0c;美国、英国和其他十几个国家公布了首份关于如何保护AI免受流氓行为侵害的详细国际协议《安全AI系统开发指南》&#xff0c;敦促企业打造“设计安全”的AI系统。协议由英国国家网络安全中心&#xff08;NCSC&#xff09;主导&a…

基于电商场景的高并发RocketMQ实战-Broker写入读取流程性能优化总结、Broker基于Pull模式的主从复制原理

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 【11来了】文章导读地址&#xff1a;点击查看文章导读&#xff01; &#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f3…

C++多线程入门笔记

参考&#xff1a; https://blog.csdn.net/qq_44891434/article/details/132559929 https://www.cnblogs.com/chen-cs/p/13055211.html #include <thread> std::thread t(function_name, args...);function_name是线程入口点的函数或可调用对象 args…是传递给函数的参数…

【Spark精讲】一文讲透SparkSQL执行过程

SparkSQL执行过程 逻辑计划 逻辑计划阶段会将用户所写的 SQL语句转换成树型数据结构(逻辑算子树)&#xff0c; SQL语句中蕴含的逻辑映射到逻辑算子树的不同节点。 顾名思义&#xff0c;逻辑计划阶段生成的逻辑算子树并不会直接提交执行&#xff0c;仅作为中间阶段 。 最终逻辑…

c# 设置文件夹隐藏

在C#中&#xff0c;你可以使用DirectoryInfo类的Attributes属性来设置文件夹的隐藏属性。以下是一个示例代码&#xff1a; using System; using System.IO;class Program {static void Main(string[] args){string folderPath "你的文件夹路径"; // 替换为你要隐藏…

二、KMDF开发之HelloWord

目录 第一步、创建KMDF项目 第二步、代码里增加打印信息 最终我们是要自己开发PCIE驱动&#xff0c;这里使用HelloWord工程把整个环境打通&#xff0c;下一篇将讲KMDF双机调试环境的搭建&#xff0c;开发环境的搭建见上一篇博文《一、KMDF开发之环境搭建-CSDN博客》。 第一步…

关键字:abstract关键字

在 Java 中&#xff0c;abstract是一个关键字&#xff0c;用于修饰类和方法。当一个类被声明为抽象类时&#xff0c;它不能被实例化&#xff0c;只能被其他类继承。同时&#xff0c;抽象类可以包含抽象方法&#xff0c;抽象方法没有方法体&#xff0c;只包含方法的签名&#xf…

docker-compose 安装gitlab

写在前面的话&#xff1a;docker-compose的文件是通用的&#xff0c;因此可以切换任意版本的gitlab的镜像版本。 往期docker-compose部署系列如&#xff1a; docker-compose语法格式docker-compose部署openldapdocker-compose 安装Sonar并集成gitlab 文章目录 1. 参考文档2. 环…

java spring boot 自定义 aop

以一个锁的加锁和释放为例 1、先定义注解 /*** 锁切面* author fmj*/ Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD) public interface VersionLockAOP { }2、然后定义切面类以及切点 /*** 切面*/ Component Aspect Slf4j public class VersionLockAOPAspe…

Spring AOP<一>简介与基础使用

spring AOP 基础定义 含义使用切面组织多个Advice,Advice放在切面中定义。也就是说是定义通知的自定义类。自定义的AOP类Aspect连接点方法调用&#xff0c;异常抛出可以增强的点JoinPoint &#xff1a;也就是**被增强的方法的总称&#xff0c;可以获取具体方法的信息&#xff…

SSRF靶场安装测试记录

目录 环境 靶场介绍 1. 获取并显示指定文件内容的应用程序代码

Navicat删除连接报错:service in use cannot be deleted的解决方法

我在删除连接时遇到了这个报错&#xff0c;内容如图。下面我介绍两种解决方法&#xff0c;非常简单。 第一种 右键点击想要删除的连接&#xff0c;先选择“关闭连接”。再选择“删除连接” 第二种 如果第一种方法无效&#xff0c;直接关闭Navicat软件&#xff0c;重新打开。然后…

WPF 基础入门(样式)

3.1 一般样式 <Grid Margin"10"><TextBlock Text"Style test" Foreground"Red" FontSize"20"/> </Grid> 3.2内嵌样式 直接在控件上定义样式&#xff0c;如下所示&#xff1a; <Grid Margin"10">…

【c/c++】指针例图基础详解

文章目录 指针变量内存指针详解例1例2练习&答案解析 指针变量内存 int main(){// 各类型变量占字节数printf("char: %d\n",sizeof(char)); // 1printf("short: %d\n",sizeof(short)); // 2printf("int: %d\n",sizeof(int)); // 4pri…

uniapp多级动态表单规则

最近有个新的业务、主要涉及多层级的动态表单提交&#xff0c;其中又涉及很多类型&#xff0c;踩了很多坑之后&#xff0c;终于研发完毕。 传来的数据格式处理 传来的数据格式涉及比较多的内容&#xff0c;以下举例一个&#xff0c;涉及到规则的填写 规则写法有两种&#xff…