對(duì)象的構(gòu)造與析構(gòu)_第1頁(yè)
對(duì)象的構(gòu)造與析構(gòu)_第2頁(yè)
對(duì)象的構(gòu)造與析構(gòu)_第3頁(yè)
對(duì)象的構(gòu)造與析構(gòu)_第4頁(yè)
對(duì)象的構(gòu)造與析構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

對(duì)象的構(gòu)造與析構(gòu)第一頁(yè),共十七頁(yè),2022年,8月28日一、對(duì)象構(gòu)造與析構(gòu)的作用完成實(shí)驗(yàn)報(bào)告中的任務(wù)1、任務(wù)2,對(duì)照課本內(nèi)容,理解構(gòu)造函數(shù)、析構(gòu)函數(shù)的調(diào)用方法與作用。完成實(shí)驗(yàn)任務(wù)3,觀察程序運(yùn)行的輸出結(jié)果,理解“復(fù)制”構(gòu)造函數(shù)在函數(shù)調(diào)用中的作用。第二頁(yè),共十七頁(yè),2022年,8月28日二、動(dòng)態(tài)內(nèi)存分配程序設(shè)計(jì)數(shù)組的定義:inta[10];只能說(shuō)明長(zhǎng)度不變的數(shù)組,而在實(shí)際應(yīng)用中,我們希望數(shù)組的長(zhǎng)度可以隨時(shí)改變,或者由用戶設(shè)定,這個(gè)要求可以通過(guò)“動(dòng)態(tài)內(nèi)存分配”技術(shù)實(shí)現(xiàn)。動(dòng)態(tài)內(nèi)存分配:在程序運(yùn)行過(guò)程中,根據(jù)需要在內(nèi)存中進(jìn)行內(nèi)存分配,稱為動(dòng)態(tài)內(nèi)存分配。相關(guān)知識(shí)的學(xué)習(xí):(預(yù)習(xí)方法:運(yùn)行示例程序)第三頁(yè),共十七頁(yè),2022年,8月28日動(dòng)態(tài)內(nèi)存分配程序設(shè)計(jì)程序使用的內(nèi)存空間示意圖:棧區(qū)堆區(qū)全局?jǐn)?shù)據(jù)區(qū)程序代碼區(qū)棧區(qū)函數(shù)形參、局部變量在程序編譯時(shí)分配堆區(qū)在程序運(yùn)行過(guò)程中分配的存儲(chǔ)全局?jǐn)?shù)據(jù)區(qū)程序代碼區(qū)第四頁(yè),共十七頁(yè),2022年,8月28日C++堆內(nèi)存分配:運(yùn)算符new和delete1.new:

申請(qǐng)一個(gè)整型的空間:

int*ip; ip=newint;*ip=10;申請(qǐng)一個(gè)整型空間并同時(shí)初始化:

ip=newint(5);cout<<*ip<<endl;申請(qǐng)長(zhǎng)度為10的一維數(shù)組(數(shù)組的長(zhǎng)度是可變的) int*ap; ap=newint[10];//注意:不能對(duì)動(dòng)態(tài)數(shù)組初始化

for(intk=0;k<10;k++)cin>>ap[k];動(dòng)態(tài)內(nèi)存分配程序設(shè)計(jì)從堆中分配一個(gè)整型存儲(chǔ)空間,返回指向內(nèi)存的指針。從堆中分配一個(gè)整型存儲(chǔ)空間并初始化為5從堆中分配連續(xù)10個(gè)整型存儲(chǔ)空間第五頁(yè),共十七頁(yè),2022年,8月28日動(dòng)態(tài)內(nèi)存分配程序設(shè)計(jì)2.Delete:

把申請(qǐng)的堆內(nèi)存空間還給系統(tǒng):

int*ip; ip=newint;*ip=10;

deleteip; int*ap; ap=newint[10]; for(intk=0;k<10;k++)cin>>ap[k];

delete

[]ap;//表示歸還一組空間第六頁(yè),共十七頁(yè),2022年,8月28日例1:運(yùn)用動(dòng)態(tài)內(nèi)存分配申請(qǐng)一個(gè)數(shù)組,長(zhǎng)度從外部輸入:

intn,*ip,*tp; cin>>n; ip=newint[n]; for(intk=0;k<n;k++)cin>>ip[k];//下標(biāo)法

//指針?lè)?ip固定

for(k=0;k<n;k++)*(ip+k)=2*(ip+k); //指針?lè)?tp可變

for(tp=ip;tp<ip+n;tp++)*tp=2*tp; delete[]ip;思考題:這樣的語(yǔ)句有什么問(wèn)題?for(;ip<ip+n;ip++)*ip=2*ip;動(dòng)態(tài)內(nèi)存分配程序設(shè)計(jì)第七頁(yè),共十七頁(yè),2022年,8月28日動(dòng)態(tài)內(nèi)存分配程序設(shè)計(jì)例2:程序可接收一個(gè)不定長(zhǎng)的字符串:voidmain(){ char*cp; intlen; cout<<“請(qǐng)輸入字符串的長(zhǎng)度:”;cin>>len; cp=newchar[len+1]; cin>>cp; cout<<cp<<endl;delete[]cp;}第八頁(yè),共十七頁(yè),2022年,8月28日動(dòng)態(tài)內(nèi)存分配程序設(shè)計(jì)例3:程序可接收一個(gè)不定長(zhǎng)的字符串(帶輸入容錯(cuò))“容錯(cuò)”就是當(dāng)用戶輸入不正確時(shí),程序能對(duì)錯(cuò)誤進(jìn)行處理,確保程序不會(huì)產(chǎn)生嚴(yán)重后果。voidmain(){ char*cp; intlen,count=3;//最多可允許三次輸入錯(cuò)誤

do{ cout<<“請(qǐng)輸入字符串的長(zhǎng)度(>0):”;cin>>len; } while(count-->0&&len>0); if(count==0)exit(0);//中止程序運(yùn)行

cp=newchar[len+1]; cin>>cp; cout<<cp<<endl; delete[]cp;}第九頁(yè),共十七頁(yè),2022年,8月28日動(dòng)態(tài)內(nèi)存分配程序設(shè)計(jì)實(shí)驗(yàn)任務(wù)4:編程實(shí)現(xiàn)可變長(zhǎng)度的數(shù)組,并按要求設(shè)置斷點(diǎn),理解指針的運(yùn)用。(把實(shí)驗(yàn)結(jié)果記錄在作業(yè)本并提交)#include<iostream.h>voidmain(){intn,*ip,*tp; cin>>n;//輸入所需數(shù)組的長(zhǎng)度

ip=newint[n];//此處設(shè)置斷點(diǎn)觀察ip的值,ip有什么意義?

for(intk=0;k<n;k++) cin>>ip[k];//在此處設(shè)置斷點(diǎn)觀察ip,k的變化

for(tp=ip;tp<ip+n;tp++) cout<<*tp<<‘

‘;//設(shè)置斷點(diǎn)觀察tp變化

delete[]ip;}//在此處設(shè)置斷點(diǎn),觀察ip的值,說(shuō)明什么?第十頁(yè),共十七頁(yè),2022年,8月28日三、模擬時(shí)鐘(字符界面,必做題)

本程序以工程壓縮文件在網(wǎng)絡(luò)課堂提交。用類的方法模擬一個(gè)時(shí)鐘的功能,要求:時(shí)鐘對(duì)象的時(shí)間屬性用整型數(shù)據(jù)描述,私有成員;時(shí)鐘對(duì)象的功能:能以多種方式初始化時(shí)鐘對(duì)象(多種構(gòu)造方法)能調(diào)整時(shí)間,當(dāng)設(shè)置的時(shí)間數(shù)據(jù)不合理時(shí)能進(jìn)行判斷并修正;能讀出時(shí)間;能進(jìn)行加一秒的操作:該函數(shù)在加一秒達(dá)到24點(diǎn)時(shí)返回1,其它情況返回0。編寫(xiě)一個(gè)程序(主函數(shù)),創(chuàng)建一個(gè)時(shí)鐘對(duì)象,并設(shè)置時(shí)鐘的時(shí)間為23:59:54,然后連續(xù)進(jìn)行10次加一秒操作,檢驗(yàn)時(shí)鐘是否可以正確進(jìn)位。(字符界面)第十一頁(yè),共十七頁(yè),2022年,8月28日練習(xí)三模擬時(shí)鐘

(windows界面,選做題)在完成練習(xí)二的基礎(chǔ)上進(jìn)行本實(shí)驗(yàn)。步驟:建立一個(gè)MFC的對(duì)話框應(yīng)用程序(界面如圖)。把練習(xí)二的“時(shí)鐘類”加入到“XXX_MFCDlg.cpp”(XXX在各人建立的工程中各不相同)的源程序文件中。注意:在原時(shí)鐘類程序中的main()函數(shù)不再使用,不要加入。時(shí)鐘類加在“XXXDlg.cpp”文件中的頭文件說(shuō)明語(yǔ)句后。定義一個(gè)全局的時(shí)鐘類對(duì)象變量ck,初始化為0:0:0定義一個(gè)標(biāo)記“確認(rèn)”按鈕狀態(tài)的BOOL變量flag=FALSE第十二頁(yè),共十七頁(yè),2022年,8月28日練習(xí)三模擬時(shí)鐘

(windows界面)步驟:各控件連接變量:編輯框、下壓按鈕:“control”類型控件響應(yīng)要求“復(fù)位”:時(shí)間清零,相關(guān)按鈕狀態(tài)改變。對(duì)象變量設(shè)置時(shí)間為0:0:0編輯框輸出文本“0”:選用函數(shù)SetWindowText("0");編輯框設(shè)置為“只讀”:選用函數(shù)SetReadOnly(1);激活“輸入”按鈕:選用函數(shù)EnableWindow(TRUE);禁用“確認(rèn)”按鈕:選用函數(shù)EnableWindow(FALSE);“確認(rèn)”按鈕狀態(tài)標(biāo)記變量Flag=FALSE;第十三頁(yè),共十七頁(yè),2022年,8月28日練習(xí)三模擬時(shí)鐘

(windows界面)步驟:控件響應(yīng)要求“輸入”:把時(shí)間編輯框設(shè)置為可輸入狀態(tài),并改變相關(guān)按鈕狀態(tài)。禁用“輸入”按鈕:選用函數(shù)EnableWindow(FALSE);激活“確認(rèn)”按鈕:選用函數(shù)EnableWindow(TRUE);“確認(rèn)”按鈕狀態(tài)標(biāo)記變量Flag=TRUE;取消編輯框“只讀”狀態(tài):選用函數(shù)SetReadOnly(0);第十四頁(yè),共十七頁(yè),2022年,8月28日練習(xí)三模擬時(shí)鐘

(windows界面)步驟:控件響應(yīng)要求“確認(rèn)”:讀入編輯框中的時(shí)間數(shù)值后,設(shè)置對(duì)象ck的時(shí)間;并改變相關(guān)按鈕狀態(tài)。讀入編輯框中的時(shí)間數(shù)值:定義三個(gè)字符數(shù)組,長(zhǎng)度10,用于存儲(chǔ)編輯框的時(shí)、分、秒數(shù)據(jù)分別把編輯框中的數(shù)據(jù)(字符型)讀入各數(shù)組中,選用函數(shù)GetWindowText(數(shù)組名,10);把字符數(shù)組中的字符型數(shù)據(jù)轉(zhuǎn)換為整型:定義三個(gè)臨時(shí)整型變量存儲(chǔ)時(shí)間數(shù)據(jù)用函數(shù)atoi(數(shù)組名)把字符數(shù)組中的字符型數(shù)據(jù)轉(zhuǎn)換為整型設(shè)置時(shí)間對(duì)象ck為新的時(shí)間編輯框設(shè)置為“只讀”:選用函數(shù)SetReadOnly(1);激活“輸入”按鈕:選用函數(shù)EnableWindow(TRUE);禁用“確認(rèn)”按鈕:選用函數(shù)EnableWindow(FALSE);“確認(rèn)”按鈕狀態(tài)標(biāo)記變量Flag=FALSE;第十五頁(yè),共十七頁(yè),2022年,8月28日步驟:設(shè)置計(jì)時(shí)器概念:windows計(jì)時(shí)器是一種輸入設(shè)備,它周期性地每經(jīng)過(guò)一個(gè)指定時(shí)間間隔就通知程序一次。在程序中,只要把時(shí)間間隔告訴windows,windows就能夠周期性地發(fā)送WM_TIMER消息。程序中響應(yīng)WM_TIMER消息,即產(chǎn)生定時(shí)變化的效果。在對(duì)話框程序文件中的成員函數(shù)OnInitDialog()中,加入下列語(yǔ)句:

//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發(fā)送一次WM_TIMER練習(xí)三模擬時(shí)鐘

(windows界面)第十六頁(yè),共十七頁(yè),2022年,8月28日步驟:響應(yīng)計(jì)時(shí)器消息在ClassWizard的MessageMap選項(xiàng)卡中,找到WM_TIMER消息,添加成員函數(shù)后,在函數(shù)中加入下列語(yǔ)句://TODO:Addyourmessagehandlercodehereand/orcalldefault inth,m,s; charhstr[10],mstr[10],sstr[10]; if(!Flag)//在“確認(rèn)”按鈕為禁用狀態(tài)時(shí)

{ ck.IncreaseSecond();//時(shí)間對(duì)象ck加一秒處理

ck.Gettime(h,m,s);//讀出時(shí)間對(duì)象ck當(dāng)前時(shí)間

itoa(h,hstr,10);//數(shù)值數(shù)據(jù)轉(zhuǎn)換為字符

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論