计算机程序设计c++ 10-2:析构函数
析构函数
- 构造函数(Constructor)在对象创建时执行,提供了初始化
对象的一种简便手段 - 析构函数(Destructor)在对象被撤销时(前)执行,用于完
成对象被撤销前的一些清理工作 - 具体地说,析构函数往往用于释放“资源”,如在构造函数中动态申请的内存空间,也可以被用来执行“用户希望在最后一次使用对象之后所执行的任何操作”,例如输出有关信息等
对象存储空间
问题
若一个类声明了五个对象,存储空间如何分配?
- 是否对象中的数据成员和函数成员都占用存储空间?
- 正常思考5个对象占用存储空间应该如下所示
实际
实际上5个对象的数据成员分配存储空间
- 5个对象的函数成员共用一个存储空间
- 具体存储结构如下图所示:
例子
假如日期类声明了一个对象 Date mybirthday;
cout << sizeof(mybirthday) << endl;
cout << sizeof(Date) << endl;
输出结果都是12这说明每个对象中的数据成员分配了存储空间
所有对象中的函数成员共用一个存储空间,在代码区存放
析构函数的定义
析构函数语法格式为:
<类名>:: ~<类名>()
{<函数体>
}
注意事项:
函数名是:类名前面加“ ~ ”符号
- 析构函数不得返回任何值
- 析构函数不得带有任何参数
- 其主要功能是在撤销对象之前进行一些善后处理工作
- 由系统自动调用
日期类中增加析构函数
#include<iostream>
using namespace std;
class Date
{ int year,month,day;public:Date():year(1900),month(1),day(1) { } //无参构造函数Date(int yy,int mm = 1,int dd = 1); //默认参数构造函数Date(Date &d):year(d.year),month(d.month),day(d.day){};//日期对象参数构造函数Date(char *ps); //字符串日期构造函数void print_ymd();~Date() { }; //析构函数定义//由于析构函数是空函数(函数体中没有一条语句),没有感觉到析构函数被自动运行// ~Date(){cout << “撤销日期对象\n”;};
};
计算机程序设计c++ 10-2:析构函数相关推荐
- 【编程实践】第一章 C++入门 《C++程序设计语言》 / By 禅与计算机程序设计艺术ChatGPT
目录 <C++程序设计语言> / By 禅与计算机程序设计艺术&ChatGPT 内容简介 第一章 C++入门 1.1 C++的起源和发展 1.1.1 C++的历史和背景 1.1.2 ...
- 算法鼻祖高德纳,82 岁仍在写《计算机程序设计的艺术》
作者 | 年素清 编辑 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 高德纳(Donald Ervin Knuth)被誉为现代计算机科学的鼻祖,毕生致力于编译程序.属性文法和运算法则等领域 ...
- 计算机界最大“追书坑”,82岁大神高德纳仍在写《计算机程序设计艺术》4B卷...
本文经AI新媒体量子位(ID:QbitAI)授权转载,转载请联系出处 晓查 编译整理 Donald Knuth,中文名高德纳,是他创造了"算法分析"这一新的计算机科学研究领域. 对 ...
- 计算机程序c复杂,《计算机程序设计(C语言)》见面课答案
<计算机程序设计(C语言)>见面课及答案 见面课:模块化程序设计方法 1.下面的描述,哪一个不符合模块化程序设计的特点( ) A.程序设计的复杂性提高了 B.提高了代码的重用性 C.易于维 ...
- 湖南省第八届大学生计算机程序设计竞赛1115: 最短的名字(模拟)
1115: 最短的名字 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 739 Solved: 292 [Submit][Status][Web Boa ...
- 计算机与程序设计语言教案,计算机程序设计(c语言)教案
计算机程序设计(c语言)教案 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 计算机程序设计(C语言)教案课程名称计算机程序设计总学 ...
- ASP.NET应用程序设计的10大技巧
ASP.NET应用程序设计的10大技巧 [ ASP.NET应用程序设计的10大技巧 | 责任编辑: 51欢乐吧 - 关涛 | 2007-09-25 10:38:16 ] 调整字体大小: 大 | 中 | ...
- 计算机程序设计语言教案,计算机程序设计(C语言)教案.doc
计算机程序设计(C语言)教案 课程 名称 计算机 程序设计 总学时 80 课题 数据类型.运算符与表达式 第 11~15 学时 课型 必修 教学目标及重点难点 目标:熟练掌握C语言中常见数据类型的表示 ...
- 宁波医院计算机试题及答案,(宁波市第25届小学生计算机程序设计竞赛试题及答案.doc...
(宁波市第25届小学生计算机程序设计竞赛试题及答案 宁波市第25届中小学生程序设计竞赛组初赛试题 1.在宁波市中小学生程序设计比赛复赛(上机编程)时,以下不能使用的编程语言是: (A)Turbo Pa ...
- 《计算机程序设计艺术》pdf
下载地址:网盘下载 内容简介 编辑 本书作者D. E. Knuth是在计算机学界十分著名的学者,在本领域享有很高权威和盛名,他的这部著作是无数计算机专业人员的学习教材和参考读物,也是许多专业研究工作者 ...
最新文章
- 【Groovy】字符串 ( 字符串拼接 | 多行字符串 )
- 2.3.9 读者-写者问题
- 2019 年如何在 CentOS 7 上安装最新版 Nginx
- java中队列的类是什么意思_java中LinkedList集合类实现栈和队列要注意什么?
- MySql 存储过程实例(附完整注释)
- .Net Core3.0 配置Configuration
- 方阵和的行列式、方阵行列式的和
- CSS3 新怎的伪类选择器
- windows使用命令或批处理文件打开远程桌面
- 安装FlexPro和设置FlexPro许可证管理器
- 软件测试工程师的日常工作流程
- ERP系统更改颜色操作步骤
- 【未来简史】读书笔记
- 记我的 15 款 MacBook Pro 13.3 寸维修(开不了机)+换屏的经历
- Vue-第三方库扩展
- @click.stop作用(阻止点击事件继续传播,即阻止事件冒泡)
- 在html语言中的换行标记是指,南开20春学期(1709、1803、1809、1903、1909、2003)《电子商务网页制作》在线作业题目【标准答案】...
- Opencv配置常见问题:
- BUCTOJ Contest1001 - 邀请赛20180814 问题 F: Poker
- FilenameFilter
热门文章
- Java服务器处理图片上传
- 为什么RTC晶振频率是32768Hz
- win7系统服务器停止,Windows7一个月后停止服务支持 Win7将于明年1月14日终止服务 停止服务后还能使用吗?...
- 《Linux驱动:USB设备驱动看这一篇就够了》
- html td 跨两个,【单选题】在HTML中,td标签的( )属性用于创建跨多个行的单元格。...
- SD卡无法格式化的原因分析
- android格式化sd卡软件,如何在各种设备中把SD卡格式化?附误格式化数据恢复方法!...
- CodeCraft-20 (Div. 2) E. Team Building(状压dp)
- namecheap域名解析
- 第十八届全国大学生智能车竞赛竞速比赛规则(讨论版)