資源描述:
《mfc中數(shù)組類(lèi)的使用分析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、MFC中數(shù)組類(lèi)的使用分析作者:佚名來(lái)源:不詳更新時(shí)間:2007-3-2516:49:45等級(jí):?MFC的數(shù)組類(lèi)支持的數(shù)組類(lèi)似于C++中的常規(guī)數(shù)組,可以存放任何數(shù)據(jù)類(lèi)型。C++的常規(guī)數(shù)組在使用前必須將其定義成能夠容納所有可能需要的元素,而MFC數(shù)組類(lèi)創(chuàng)建的對(duì)象可以根據(jù)需要?jiǎng)討B(tài)地增大或減小,數(shù)組的起始下標(biāo)是0,而上限可以是固定的,也可以隨著元素的增加而增加,數(shù)組在內(nèi)存中的地址仍然是連續(xù)分配的?! FC定義了數(shù)組模板類(lèi)CArray,并針對(duì)各種常用變量類(lèi)型定義了CByteArray,CWordArray,CUIntArray,CDWordArray,CStr
2、ingArray,CObArray,CPtrArray。詳見(jiàn)下表:數(shù)組類(lèi)變量類(lèi)型變量數(shù)值范圍頭文件CArray通過(guò)模板類(lèi)的參數(shù)類(lèi)型設(shè)定各種類(lèi)型?Afxtempl.hCByteArray8位無(wú)符號(hào)整數(shù)BYTE類(lèi)型0—255Afxcoll.hCWordArray16位無(wú)符號(hào)整數(shù)WORD類(lèi)型0—65535Afxcoll.hCDWordArray32位無(wú)符號(hào)整數(shù)DWORD類(lèi)型0—4294967295Afxcoll.hCUIntArray32位無(wú)符號(hào)整數(shù)UINT類(lèi)型0—4294967295Afxcoll.hCStringArrayCString字符串string
3、字符串?Afxcoll.hCObArrayCObject類(lèi)及其派生類(lèi)?Afxcoll.hCPtrArrayvoid*類(lèi)型指針?Afxcoll.h MFC數(shù)組類(lèi)使用方法基本相同,下面分別以CArray和CUIntArray為例演示說(shuō)明數(shù)組類(lèi)的使用方法。 使用CArray 打開(kāi)VC++6.0,創(chuàng)建基于對(duì)話框的工程Array。CArrayDlg類(lèi)聲明文件(ArrayDlg.h)中添加語(yǔ)句:#include 請(qǐng)記?。菏褂肅Array一定要包含頭文件afxtempl.h?! 〈蜷_(kāi)主對(duì)話框資源IDD_ARRAY_DIALOG,添加一
4、個(gè)按鈕IDC_ARRAY_CPOINT,標(biāo)題為CArray_CPoint,雙擊該按鈕,在OnArrayCpoint()函數(shù)中添加如下代碼:voidCArrayDlg::OnArrayCpoint(){ CArraym_Array; m_Array.SetSize(10,10); CPointpt1(10,10); m_Array.Add(pt1); CPointpt2(10,50); m_Array.Add(pt2); CPointpt3(10,100); m_Array.Add(pt3); intsize=m_Arra
5、y.GetSize(); CClientDCdc(this); dc.MoveTo(0,0); CPointpt; for(inti=0;im_Array; 該語(yǔ)句定義一個(gè)CArray數(shù)組對(duì)象,模板類(lèi)CArray有兩個(gè)參數(shù),第一個(gè)參數(shù)為數(shù)組元素的類(lèi)型,該例中是CPoint,即m_Array是CPoint數(shù)組;第二個(gè)參數(shù)為引用類(lèi)型,一般有兩種選擇,一種選擇與第一個(gè)參數(shù)類(lèi)型相同,它意味著數(shù)
6、組對(duì)象作為參數(shù)傳遞時(shí),傳遞的是數(shù)組對(duì)象。第二種選擇是第一個(gè)參數(shù)類(lèi)型的引用,它意味著數(shù)組對(duì)象作為參數(shù)傳遞時(shí),傳遞的是數(shù)組對(duì)象的指針。因此,尤其對(duì)于較復(fù)雜的數(shù)組結(jié)構(gòu)類(lèi)型,推薦使用引用傳遞,節(jié)約內(nèi)存同時(shí)加快程序運(yùn)行速度,正如本例使用的是CPoint&。m_Array.SetSize(10,10); SetSize函數(shù)設(shè)定數(shù)組的大小,該函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)設(shè)定數(shù)組的大?。坏诙€(gè)參數(shù)設(shè)定數(shù)組增長(zhǎng)時(shí)內(nèi)存分配的大小,缺省值是-1,使用缺省值可以保證內(nèi)存分配得更加合理。本例中第二個(gè)參數(shù)是10,意即增加一個(gè)數(shù)組元素會(huì)分配10個(gè)元素大小的內(nèi)存供數(shù)組使用。 您可以
7、隨時(shí)使用SetSize函數(shù)設(shè)定數(shù)組的大小,如果第一個(gè)參數(shù)值小于數(shù)組已有成員數(shù)量,多于第一個(gè)參數(shù)值的成員將被截去并釋放相應(yīng)內(nèi)存?! ≡谑褂肅Array數(shù)組前,最好先使用SetSize確定其大小并申請(qǐng)存儲(chǔ)空間。如果不這樣做,向數(shù)組中增加元素時(shí),需要不斷地移動(dòng)和拷貝元素造成運(yùn)行的低效率和內(nèi)存碎塊。m_Array.Add(pt1); Add函數(shù)添加數(shù)組元素。intsize=m_Array.GetSize(); GetSize返回?cái)?shù)組元素的數(shù)目。for(inti=0;i
8、);} 為了直觀顯示,該段代碼將各數(shù)組元素作成折線畫(huà)到屏幕上,其中GetAt(intinde