版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对象的构造与析构第一页,共十七页,2022年,8月28日一、对象构造与析构的作用完成实验报告中的任务1、任务2,对照课本内容,理解构造函数、析构函数的调用方法与作用。完成实验任务3,观察程序运行的输出结果,理解“复制”构造函数在函数调用中的作用。第二页,共十七页,2022年,8月28日二、动态内存分配程序设计数组的定义:inta[10];只能说明长度不变的数组,而在实际应用中,我们希望数组的长度可以随时改变,或者由用户设定,这个要求可以通过“动态内存分配”技术实现。动态内存分配:在程序运行过程中,根据需要在内存中进行内存分配,称为动态内存分配。相关知识的学习:(预习方法:运行示例程序)第三页,共十七页,2022年,8月28日动态内存分配程序设计程序使用的内存空间示意图:栈区堆区全局数据区程序代码区栈区函数形参、局部变量在程序编译时分配堆区在程序运行过程中分配的存储全局数据区程序代码区第四页,共十七页,2022年,8月28日C++堆内存分配:运算符new和delete1.new:
申请一个整型的空间:
int*ip; ip=newint;*ip=10;申请一个整型空间并同时初始化:
ip=newint(5);cout<<*ip<<endl;申请长度为10的一维数组(数组的长度是可变的) int*ap; ap=newint[10];//注意:不能对动态数组初始化
for(intk=0;k<10;k++)cin>>ap[k];动态内存分配程序设计从堆中分配一个整型存储空间,返回指向内存的指针。从堆中分配一个整型存储空间并初始化为5从堆中分配连续10个整型存储空间第五页,共十七页,2022年,8月28日动态内存分配程序设计2.Delete:
把申请的堆内存空间还给系统:
int*ip; ip=newint;*ip=10;
deleteip; int*ap; ap=newint[10]; for(intk=0;k<10;k++)cin>>ap[k];
delete
[]ap;//表示归还一组空间第六页,共十七页,2022年,8月28日例1:运用动态内存分配申请一个数组,长度从外部输入:
intn,*ip,*tp; cin>>n; ip=newint[n]; for(intk=0;k<n;k++)cin>>ip[k];//下标法
//指针法:ip固定
for(k=0;k<n;k++)*(ip+k)=2*(ip+k); //指针法:tp可变
for(tp=ip;tp<ip+n;tp++)*tp=2*tp; delete[]ip;思考题:这样的语句有什么问题?for(;ip<ip+n;ip++)*ip=2*ip;动态内存分配程序设计第七页,共十七页,2022年,8月28日动态内存分配程序设计例2:程序可接收一个不定长的字符串:voidmain(){ char*cp; intlen; cout<<“请输入字符串的长度:”;cin>>len; cp=newchar[len+1]; cin>>cp; cout<<cp<<endl;delete[]cp;}第八页,共十七页,2022年,8月28日动态内存分配程序设计例3:程序可接收一个不定长的字符串(带输入容错)“容错”就是当用户输入不正确时,程序能对错误进行处理,确保程序不会产生严重后果。voidmain(){ char*cp; intlen,count=3;//最多可允许三次输入错误
do{ cout<<“请输入字符串的长度(>0):”;cin>>len; } while(count-->0&&len>0); if(count==0)exit(0);//中止程序运行
cp=newchar[len+1]; cin>>cp; cout<<cp<<endl; delete[]cp;}第九页,共十七页,2022年,8月28日动态内存分配程序设计实验任务4:编程实现可变长度的数组,并按要求设置断点,理解指针的运用。(把实验结果记录在作业本并提交)#include<iostream.h>voidmain(){intn,*ip,*tp; cin>>n;//输入所需数组的长度
ip=newint[n];//此处设置断点观察ip的值,ip有什么意义?
for(intk=0;k<n;k++) cin>>ip[k];//在此处设置断点观察ip,k的变化
for(tp=ip;tp<ip+n;tp++) cout<<*tp<<‘
‘;//设置断点观察tp变化
delete[]ip;}//在此处设置断点,观察ip的值,说明什么?第十页,共十七页,2022年,8月28日三、模拟时钟(字符界面,必做题)
本程序以工程压缩文件在网络课堂提交。用类的方法模拟一个时钟的功能,要求:时钟对象的时间属性用整型数据描述,私有成员;时钟对象的功能:能以多种方式初始化时钟对象(多种构造方法)能调整时间,当设置的时间数据不合理时能进行判断并修正;能读出时间;能进行加一秒的操作:该函数在加一秒达到24点时返回1,其它情况返回0。编写一个程序(主函数),创建一个时钟对象,并设置时钟的时间为23:59:54,然后连续进行10次加一秒操作,检验时钟是否可以正确进位。(字符界面)第十一页,共十七页,2022年,8月28日练习三模拟时钟
(windows界面,选做题)在完成练习二的基础上进行本实验。步骤:建立一个MFC的对话框应用程序(界面如图)。把练习二的“时钟类”加入到“XXX_MFCDlg.cpp”(XXX在各人建立的工程中各不相同)的源程序文件中。注意:在原时钟类程序中的main()函数不再使用,不要加入。时钟类加在“XXXDlg.cpp”文件中的头文件说明语句后。定义一个全局的时钟类对象变量ck,初始化为0:0:0定义一个标记“确认”按钮状态的BOOL变量flag=FALSE第十二页,共十七页,2022年,8月28日练习三模拟时钟
(windows界面)步骤:各控件连接变量:编辑框、下压按钮:“control”类型控件响应要求“复位”:时间清零,相关按钮状态改变。对象变量设置时间为0:0:0编辑框输出文本“0”:选用函数SetWindowText("0");编辑框设置为“只读”:选用函数SetReadOnly(1);激活“输入”按钮:选用函数EnableWindow(TRUE);禁用“确认”按钮:选用函数EnableWindow(FALSE);“确认”按钮状态标记变量Flag=FALSE;第十三页,共十七页,2022年,8月28日练习三模拟时钟
(windows界面)步骤:控件响应要求“输入”:把时间编辑框设置为可输入状态,并改变相关按钮状态。禁用“输入”按钮:选用函数EnableWindow(FALSE);激活“确认”按钮:选用函数EnableWindow(TRUE);“确认”按钮状态标记变量Flag=TRUE;取消编辑框“只读”状态:选用函数SetReadOnly(0);第十四页,共十七页,2022年,8月28日练习三模拟时钟
(windows界面)步骤:控件响应要求“确认”:读入编辑框中的时间数值后,设置对象ck的时间;并改变相关按钮状态。读入编辑框中的时间数值:定义三个字符数组,长度10,用于存储编辑框的时、分、秒数据分别把编辑框中的数据(字符型)读入各数组中,选用函数GetWindowText(数组名,10);把字符数组中的字符型数据转换为整型:定义三个临时整型变量存储时间数据用函数atoi(数组名)把字符数组中的字符型数据转换为整型设置时间对象ck为新的时间编辑框设置为“只读”:选用函数SetReadOnly(1);激活“输入”按钮:选用函数EnableWindow(TRUE);禁用“确认”按钮:选用函数EnableWindow(FALSE);“确认”按钮状态标记变量Flag=FALSE;第十五页,共十七页,2022年,8月28日步骤:设置计时器概念:windows计时器是一种输入设备,它周期性地每经过一个指定时间间隔就通知程序一次。在程序中,只要把时间间隔告诉windows,windows就能够周期性地发送WM_TIMER消息。程序中响应WM_TIMER消息,即产生定时变化的效果。在对话框程序文件中的成员函数OnInitDialog()中,加入下列语句:
//TODO:Addextrainitializationhere ck.Settime(0,0,0); m_Hour.SetWindowText("0"); m_Minute.SetWindowText("0"); m_Second.SetWindowText("0"); m_Hour.SetReadOnly(1); m_Minute.SetReadOnly(1); m_Second.SetReadOnly(1); SetTimer(1,1000,NULL);//每1000ms发送一次WM_TIMER练习三模拟时钟
(windows界面)第十六页,共十七页,2022年,8月28日步骤:响应计时器消息在ClassWizard的MessageMap选项卡中,找到WM_TIMER消息,添加成员函数后,在函数中加入下列语句://TODO:Addyourmessagehandlercodehereand/orcalldefault inth,m,s; charhstr[10],mstr[10],sstr[10]; if(!Flag)//在“确认”按钮为禁用状态时
{ ck.IncreaseSecond();//时间对象ck加一秒处理
ck.Gettime(h,m,s);//读出时间对象ck当前时间
itoa(h,hstr,10);//数值数据转换为字符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 法律行业客服工作总结专业解决法律问题
- 环保设备行业采购工作总结
- 音乐行业安全生产工作总结
- 分析行业数据解读培训总结
- 咨询行业中战略顾问的工作表现概述
- 【八年级下册历史】第6课 艰难探索与建设成就 同步练习
- 创新实验资源共享合同(2篇)
- 2024社团规章制度(30篇)
- 《政府采购业务知识》课件
- 2024年福建省《辅警招聘考试必刷500题》考试题库带答案(突破训练)
- 【8物(科)期末】合肥市庐阳区2023-2024学年八年级上学期期末质量检测物理试卷
- 国家安全知识教育
- 2024-2030年中国停车场建设行业发展趋势投资策略研究报告
- 蓝军战略课件
- 物业管理重难点分析及解决措施
- 北京邮电大学《数据库系统》2022-2023学年第一学期期末试卷
- 湖北省黄冈市2023-2024学年高一上学期期末考试化学试题(含答案)
- 中国HDMI高清线行业市场动态分析及未来趋势研判报告
- 物流公司安全生产监督检查管理制度
- DB22T 277-2011 建筑电气防火检验规程
- 2024年基本公共卫生服务工作计划(三篇)
评论
0/150
提交评论