资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,一、对象构造与析构的作用,完成实验报告中的任务,1,、任务,2,,对照课本内容,理解构造函数、析构函数的调用方法与作用。,完成实验任务,3,,观察程序运行的输出结果,理解“复制”构造函数在函数调用中的作用。,二、动态内存分配程序设计,数组的定义:,int a10;,只能说明,长度不变,的数组,而在实际应用中,我们希望数组的长度可以随时改变,或者由用户设定,这个要求可以通过“动态内存分配”技术实现。,动态内存分配:在程序运行过程中,根据需要在内存中进行内存分配,称为动态内存分配。,相关知识的学习,:(预习方法:运行示例程序),动态内存分配程序设计,程序使用的内存空间示意图:,栈区,堆区,全局数据区,程序代码区,栈区,函数形参、局部变量,在程序,编译,时分配,堆区,在程序,运行,过程中,分配的存储,全局数据区,程序代码区,C,堆内存分配,:,运算符,new,和,delete,1,new,:,申请一个整型的空间:,int *ip;,ip=,new,int;*ip=10;,申请一个整型空间并同时初始化:,ip=,new,int(5);cout*ipapk;,动态内存分配程序设计,从堆中分配一个整型存储空间,,返回指向内存的指针。,从堆中分配一个整型存储空间并初始化为,5,从堆中分配连续,10,个整型存储空间,动态内存分配程序设计,2,Delete:,把申请的堆内存空间还给系统:,int *ip;,ip=,new,int;*ip=10;,delete,ip;,int *ap;,ap=,new,int10;,for(int k=0;kapk;,delete,ap;/,表示归还一组空间,例,1,:运用动态内存分配申请一个数组,长度从外部输入:,int n,*ip,*tp;,cinn;,ip=new intn;,for(int k=0;kipk;/,下标法,/,指针法,:ip,固定,for(k=0;kn;k+)*(ip+k)=2*(ip+k);,/,指针法,:tp,可变,for(tp=ip;tpip+n;tp+)*tp=2*tp;,delete ip;,思考题:这样的语句有什么问题?,for(;,ipip+n,;ip+)*ip=2*ip;,动态内存分配程序设计,动态内存分配程序设计,例,2,:程序可接收一个不定长的字符串:,void main(),char*cp;,int len;,coutlen;,cp=new charlen+1;,cincp;,coutcpendl;delete cp;,动态内存分配程序设计,例,3,:程序可接收一个不定长的字符串(带输入容错),“容错”就是当用户输入不正确时,程序能对错误进行处理,确保程序不会产生严重后果。,void main(),char*cp;,int len,count=3;/,最多可允许三次输入错误,do,cout0),:”;,cinlen;,while(count-0,if(count=0)exit(0);/,中止程序运行,cp=new charlen+1;,cincp;,coutcpn;/,输入所需数组的长度,ip=new intn;/,此处设置断点观察,ip,的值,,ip,有什么意义?,for(int k=0;kipk;/,在此处设置断点观察,ip,k,的变化,for(tp=ip;tpip+n;tp+),cout*tp;/,设置断点观察,tp,变化,delete ip;,/,在此处设置断点,观察,ip,的值,说明什么?,三、模拟时钟(字符界面,必做题)本程序以工程压缩文件在网络课堂提交。,用类的方法模拟一个时钟的功能,要求:,时钟对象的时间属性用整型数据描述,私有成员;,时钟对象的功能:,能以多种方式初始化时钟对象(多种构造方法),能调整时间,当设置的时间数据不合理时能进行判断并修正;,能读出时间;,能进行加一秒的操作:该函数在加一秒达到,24,点时返回,1,,其它情况返回,0,。,编写一个程序(主函数),创建一个时钟对象,并设置时钟的时间为,23:59:54,,然后连续进行,10,次加一秒操作,检验时钟是否可以正确进位。(字符界面),练习三 模拟时钟(,windows,界面,选做题),在完成练习二的基础上进行本实验。,步骤:,建立一个,MFC,的对话框应用程序(界面如图)。,把练习二的“时钟类”加入到“,XXX_MFCDlg.cpp”(XXX,在各人建立的工程中各不相同,),的源程序文件中。注意:,在原时钟类程序中的,main(),函数不再使用,不要加入。,时钟类加在“,XXXDlg.cpp”,文件中的头文件说明语句后。,定义一个全局的时钟类对象变量,ck,,初始化为,0:0:0,定义一个标记“确认”按钮状态的,BOOL,变量,flag=FALSE,练习三 模拟时钟(,windows,界面),步骤:,各控件连接变量:,编辑框、下压按钮:“,control”,类型,控件响应要求,“复位”:时间清零,相关按钮状态改变。,对象变量设置时间为,0:0:0,编辑框输出文本“,0”,:选用函数,SetWindowText(0),;,编辑框设置为“只读”:选用函数,SetReadOnly(1),;,激活“输入”按钮:选用函数,EnableWindow(TRUE),;,禁用“确认”按钮:选用函数,EnableWindow(FALSE),;,“确认”按钮状态标记变量,Flag=FALSE,;,练习三 模拟时钟(,windows,界面),步骤:,控件响应要求,“输入”:把时间编辑框设置为可输入状态,并改变相关按钮状态。,禁用“输入”按钮:选用函数,EnableWindow(FALSE),;,激活“确认”按钮:选用函数,EnableWindow(TRUE),;,“确认”按钮状态标记变量,Flag=TRUE,;,取消编辑框“只读”状态:选用函数,SetReadOnly(0),;,练习三 模拟时钟(,windows,界面),步骤:,控件响应要求,“确认”:读入编辑框中的时间数值后,设置对象,ck,的时间;并改变相关按钮状态。,读入编辑框中的时间数值:,定义三个字符数组,长度,10,,用于存储编辑框的时、分、秒数据,分别把编辑框中的数据(字符型)读入各数组中,选用函数,GetWindowText(,数组名,10),;,把字符数组中的字符型数据转换为整型:,定义三个临时整型变量存储时间数据,用函数,atoi(,数组名,),把字符数组中的字符型数据转换为整型,设置时间对象,ck,为新的时间,编辑框设置为“只读”:选用函数,SetReadOnly(1),;,激活“输入”按钮:选用函数,EnableWindow(TRUE),;,禁用“确认”按钮:选用函数,EnableWindow(FALSE),;,“确认”按钮状态标记变量,Flag=FALSE,;,步骤:,设置计时器,概念:,windows,计时器是一种输入设备,它周期性地每经过一个指定时间间隔就通知程序一次。在程序中,只要把时间间隔告诉,windows,,,windows,就能够周期性地发送,WM_TIMER,消息。程序中响应,WM_TIMER,消息,即产生定时变化的效果。,在对话框程序文件中的成员函数,OnInitDialog(),中,加入下列语句:,/TODO:Add extra initialization here,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,界面),步骤:响应计时器消息,在,ClassWizard,的,MessageMap,选项卡中,找到,WM_TIMER,消息,添加成员函数后,在函数中加入下列语句:,/TODO:Add your message handler code here and/or call default,int h,m,s;,char hstr10,mstr10,sstr10;,if(!Flag)/,在“确认”按钮为禁用状态时,ck.IncreaseSecond();/,时间对象,ck,加一秒处理,ck.Gettime(h,m,s);/,读出时间对象,ck,当前时间,itoa(h,hstr,10);/,数值数据转换为字符型数据,itoa(m,mstr,10);,itoa(s,sstr,10);,m_Hour.SetWindowText(hstr);/,在时间读数编辑框上显示,m_Minute.SetWindowText(mstr);,m_Second.SetWindowText(sstr);,CDialog:OnTimer(nIDEvent);/,系统自动生成的语句,练习三 模拟时钟(,windows,界面),
展开阅读全文