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

下載本文檔

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

文檔簡介

《面向?qū)ο蟪绦蛟O(shè)計》

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

申請一個整型的空間:

int*ip;

ip=new

int;*ip=10;申請一個整型空間并同時初始化:

ip=new

int(5);cout<<*ip<<endl;申請長度為10的一維數(shù)組(數(shù)組的長度是可變的)

int*ap; ap=newint[10];//注意:不能對動態(tài)數(shù)組初始化

for(intk=0;k<10;k++)cin>>ap[k];動態(tài)內(nèi)存分配程序設(shè)計從堆中分配一個整型存儲空間,返回指向內(nèi)存的指針。從堆中分配一個整型存儲空間并初始化為5從堆中分配連續(xù)10個整型存儲空間動態(tài)內(nèi)存分配程序設(shè)計2.Delete:

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

int*ip;

ip=new

int;*ip=10;

delete

ip;

int*ap;

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

delete

[]ap;//表示歸還一組空間例1:運用動態(tài)內(nèi)存分配申請一個數(shù)組,長度從外部輸入:

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;動態(tài)內(nèi)存分配程序設(shè)計動態(tài)內(nèi)存分配程序設(shè)計例2:程序可接收一個不定長的字符串:voidmain(){ char*cp;

int

len;

cout<<“請輸入字符串的長度:”;cin>>len; cp=newchar[len+1];

cin>>cp;

cout<<cp<<endl;delete[]cp;}動態(tài)內(nèi)存分配程序設(shè)計例3:程序可接收一個不定長的字符串(帶輸入容錯)“容錯”就是當用戶輸入不正確時,程序能對錯誤進行處理,確保程序不會產(chǎn)生嚴重后果。voidmain(){ char*cp;

int

len,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;}動態(tài)內(nèi)存分配程序設(shè)計實驗任務4:編程實現(xiàn)可變長度的數(shù)組,并按要求設(shè)置斷點,理解指針的運用。(把實驗結(jié)果記錄在作業(yè)本并提交)#include<iostream.h>voidmain(){intn,*ip,*tp;

cin>>n;//輸入所需數(shù)組的長度

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

for(intk=0;k<n;k++)

cin>>ip[k];//在此處設(shè)置斷點觀察ip,k的變化

for(tp=ip;tp<ip+n;tp++)

cout<<*tp<<‘‘;//設(shè)置斷點觀察tp變化

delete[]ip;}//在此處設(shè)置斷點,觀察ip的值,說明什么?三、模擬時鐘(字符界面,必做題)

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

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

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

(windows界面)步驟:控件響應要求“輸入”:把時間編輯框設(shè)置為可輸入狀態(tài),并改變相關(guān)按鈕狀態(tài)。禁用“輸入”按鈕:選用函數(shù)EnableWindow(FALSE);激活“確認”按鈕:選用函數(shù)EnableWindow(TRUE);“確認”按鈕狀態(tài)標記變量Flag=TRUE;取消編輯框“只讀”狀態(tài):選用函數(shù)SetReadOnly(0);練習三模擬時鐘

(windows界面)步驟:控件響應要求“確認”:讀入編輯框中的時間數(shù)值后,設(shè)置對象ck的時間;并改變相關(guān)按鈕狀態(tài)。讀入編輯框中的時間數(shù)值:定義三個字符數(shù)組,長度10,用于存儲編輯框的時、分、秒數(shù)據(jù)分別把編輯框中的數(shù)據(jù)(字符型)讀入各數(shù)組中,選用函數(shù)GetWindowText(數(shù)組名,10);把字符數(shù)組中的字符型數(shù)據(jù)轉(zhuǎn)換為整型:定義三個臨時整型變量存儲時間數(shù)據(jù)用函數(shù)atoi(數(shù)組名)把字符數(shù)組中的字符型數(shù)據(jù)轉(zhuǎn)換為整型設(shè)置時間對象ck為新的時間編輯框設(shè)置為“只讀”:選用函數(shù)SetReadOnly(1);激活“輸入”按鈕:選用函數(shù)EnableWindow(TRUE);禁用“確認”按鈕:選用函數(shù)EnableWindow(FALSE);“確認”按鈕狀態(tài)標記變量Flag=FALSE;步驟:設(shè)置計時器概念:windows計時器是一種輸入設(shè)備,它周期性地每經(jīng)過一個指定時間間隔就通知程序一次。在程序中,只要把時間間隔告訴windows,windows就能夠周期性地發(fā)送WM_TIMER消息。程序中響應WM_TIMER消息,即產(chǎn)生定時變化的效果。在對話框程序文件中的成員函數(shù)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發(fā)送一次WM_TIMER練習三模擬時鐘

(windows界面)步驟:響應計時器消息在ClassWizard的MessageMap選項卡中,找到WM_TIMER消息,添加成員函數(shù)后,在函數(shù)中加入下列語句://TODO:Addyourmessagehandlercodehereand/orcalldefault

inth,m,s; charhstr[10],mstr[10],sstr[10]; if(!Flag)//在“確認”按鈕為禁用狀態(tài)時

{

ck.IncreaseSecond();//時間對象ck加一秒處理

ck.Gettime(h,m,s);//讀出時間對象ck當前時間

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

溫馨提示

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

最新文檔

評論

0/150

提交評論