版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、:數(shù)據(jù)類型型與語法作者:謝興興 HYPERLINK mailto:enigma19971 eenigmma199971hhotmaail.ccom 轉(zhuǎn)轉(zhuǎn)載需注明明出處Symbiian系統(tǒng)統(tǒng)已經(jīng)提供供了一套已已經(jīng)定義好好的內(nèi)置的的數(shù)據(jù)類型型。為了保保證你的代代碼是編譯譯器無關(guān)的的,應(yīng)當(dāng)使使用下面ssymbiian系統(tǒng)統(tǒng)提供的數(shù)數(shù)據(jù)類型,而而不要使用用原生數(shù)據(jù)據(jù)類型(nnativve tyypes,這里指標(biāo)標(biāo)準(zhǔn)C中的的int ,chaar等)。基本類型TIntXX 和 TTUinttX (其其中X = 8, 16 和和 32) 分別用用來表示 8位, 16位 和 322位的有符符號(hào)和無符符號(hào)的整數(shù)
2、數(shù)。 一般般情況下,使使用TInnt 和TTUintt就可以了了,除非是是在考慮代代碼優(yōu)化或或兼容性的的時(shí)候,才才會(huì)用到TTInt88,TInnt16這這樣的類型型。TInnt 或 TUinnt 類型型分別對(duì)應(yīng)應(yīng)有符號(hào)和和無符號(hào)的的整數(shù)。TInt664. 在在版本8.0之前,SSymbiian系統(tǒng)統(tǒng)中不支持持64位的的算術(shù)運(yùn)算算,而是用用兩個(gè)322位的值來來實(shí)現(xiàn)644位的整數(shù)數(shù),在8.0版本之之后,TIInt644和TUIInt644才被定義義為lonng loong類型型,真正使使用64位位的內(nèi)置數(shù)數(shù)據(jù)類型。TReall32 和和 TReeal644 (TRReal相相當(dāng)于TRReal664
3、) 這這兩個(gè)數(shù)據(jù)據(jù)類型相當(dāng)當(dāng)于單精度度和雙精度度的浮點(diǎn)數(shù)數(shù),由于浮浮點(diǎn)數(shù)的運(yùn)運(yùn)算要比整整數(shù)慢,所所以一般應(yīng)應(yīng)盡量避免免使用浮點(diǎn)點(diǎn)數(shù)的運(yùn)算算。TTexttX (其其中X = 8 或或 16) 分分別對(duì)應(yīng)窄窄或?qū)挼淖肿址ㄗⅲ核^窄字字符通常AASCIII碼字符,而而寬字符是是指uniicodee字符集的的字符 )TAny*TAny* 意為指指向任意內(nèi)內(nèi)容的指針針,在這種種意義上講講,TAnny相當(dāng)于于voidd, TAAny* 相當(dāng)于TTAny*。但是,在在某些場合合下,vooid標(biāo)示示空,如:void helllo(vvoid);這時(shí),不要要將它改寫寫為: TAnyy helllo(TTAny
4、);TBooll 標(biāo)示布爾類類型。Syymbiaan系統(tǒng)提提供了兩個(gè)個(gè)常量:EETruee (=11) 和 EFallse (=0),分分別表示真真和假。注意:在SSymbiian系統(tǒng)統(tǒng)中,TBBool被定定義為innt, 而而ETruue和EFFalsee被定義為為enumm,所以,如如果一個(gè)函函數(shù)的返回回值為TBBool,不不要用如下下的代碼來來比較函數(shù)數(shù)的返回值值:TBooll isLLargeer(TIInt aa, TIInt bb)returrn (aab)?ETruue:EFFalsee; if(issLargger(44,3)=ETrrue). /錯(cuò)誤誤,編譯不不過。if(is
5、sLargger(44,3). /正確確2類和對(duì)象象2.1 SSymbiian系統(tǒng)統(tǒng)中的命名名習(xí)慣:在Symbbian系系統(tǒng)中編寫寫代碼時(shí),應(yīng)應(yīng)當(dāng)遵守種種樣幾個(gè)規(guī)規(guī)則:成員員變量的命命名以小寫寫字母i開開頭,方法法的參數(shù)以以小寫字母母a開頭,例例如:classs Perrnonpubliic:TIntt iAgge;voidd SettAge(TIntt aAAge)iAgee = aaAge;在symbbian系系統(tǒng)中存在在幾種不同同類型的類類(claass),不不同類型的的類,其特特性也各不不相同。有的在堆(hheap)上上創(chuàng)建,有有的在棧(sstackk)上創(chuàng)建建,特別的的是,類的的實(shí)例
6、(iinstaance)的的清除方式式也不盡相相同(下面面,為了方方便我們把把類的類別別稱為型別別)。型別別(claass ttype)可可以體現(xiàn)這這些不同的的特點(diǎn)。每每個(gè)型別都都有一套定定義好的關(guān)關(guān)于如何創(chuàng)創(chuàng)建和清除除實(shí)例的規(guī)規(guī)則。為了了容易區(qū)分分型別,SSymbiian系統(tǒng)統(tǒng)使用了一一個(gè)簡單的的命名規(guī)則則:類名以以大寫字母母開頭(TT,C,RR 或M)。作為類的的設(shè)計(jì)者,你你先要考慮慮這個(gè)類的的行為,看看它到底與與哪種型別別匹配,一一旦確定了了它的類型型,然后你你就可以專專注于該類類的功能。同樣,對(duì)對(duì)一個(gè)類的的使用者來來講,如果果他不熟悉悉這個(gè)類, 但類的命命名規(guī)則可可以幫助他他弄清你的的
7、意圖-如何用安安全的方式式初始化、使用和銷銷毀一個(gè)類類的對(duì)象(oobjecct)。下面,我主主要討論不不同型別的的主要特性性。T 類T類的行為為類似于CC+中的的內(nèi)置類型型,因此,它它們以T作作前綴(”T”代表”Typee”)。象內(nèi)內(nèi)置類型一一樣,它們們沒有析構(gòu)構(gòu)方法(ddestrructoor),這這導(dǎo)致的結(jié)結(jié)果是:TT類不能包包含具有析析構(gòu)方法的的成員變量量。所以,一一般情況下下,T類的的成員變量量只能是內(nèi)內(nèi)置類型的的數(shù)據(jù)或者者是其它的的T類的對(duì)對(duì)象。在某某些的情況況下T類也也可以包含含其它對(duì)象象的指針或或引用,不不過,這時(shí)時(shí)它們之前前是“使用”關(guān)系,而而不是“擁有”關(guān)系(也也就是說,這這
8、個(gè)T類對(duì)對(duì)象并不負(fù)負(fù)責(zé)對(duì)成員員的創(chuàng)建和和銷毀的工工作)。不不能擁有外外部數(shù)據(jù)的的原因是因因?yàn)門類沒沒有析構(gòu)方方法。正是是由于沒有有析構(gòu)方法法,T類的的對(duì)象可以以在棧上創(chuàng)創(chuàng)建,當(dāng)程程序流程退退出函數(shù)或或產(chǎn)生leeave(一一種代碼異異常)的時(shí)時(shí)候,系統(tǒng)統(tǒng)自動(dòng)清除除它。即使使T類有一一個(gè)析構(gòu)方方法,在發(fā)發(fā)生異常(在在Symbbian系系統(tǒng)中,異異常被稱為為leavve)時(shí)SSymbiian 系系統(tǒng)也不會(huì)會(huì)調(diào)用它,因因?yàn)閘eaave沒有有模仿標(biāo)準(zhǔn)準(zhǔn)C+的的拋出異常常的做法。T類的對(duì)象象也可以在在堆上創(chuàng)建建。但是,應(yīng)應(yīng)當(dāng)在調(diào)用用有可能發(fā)發(fā)生異常的的代碼之前前,將這個(gè)個(gè)對(duì)象放入入到清除棧棧(cleean
9、uppStacck),在在發(fā)生異常常的時(shí)候,清除棧(cleanupStack)會(huì)釋放這個(gè)對(duì)象。C 類這種類都是是從CBaase派生生來的(直直接或間接接)。/.h fileeclasss CStuudentt:publlic CBasse publlic:CStuudentt()RDeebug:Priint(_L(ii am a sttudennt);CSttudennt()RDeebug:Priint(_L(ppleasse, ddontt killl mee!);voidd SamppleFuunctiion();privvate:TIntt iCoode;TIntt iSccore;CB
10、asee有兩個(gè)特特點(diǎn):首先先,它有一一個(gè)虛的析析構(gòu)方法,這這樣,可以以通過CBBase指指針來刪除除它的子類類。代碼如如下所示:CBasee *pSStu = neww CSttudennt();delette pSStu;結(jié)果: i aam a studdent pleaase, dont kiill mme! 其次,CBBase類類和它的子子類,重載載了neww操作符,這這使得當(dāng)它它在堆上創(chuàng)創(chuàng)建的時(shí)候候,自動(dòng)初初始化為00,也就是是說,當(dāng)它它一開始被被創(chuàng)建出來來的時(shí)候,所所有的成員員變量都被被初始化為為0,所以以您不必在在構(gòu)造方法法中去做這這件事情。但是,在在棧上創(chuàng)建建對(duì)象時(shí),情情況并非這
11、這樣, 因因?yàn)檫@時(shí)沒沒有用到nnew操作作。這將潛潛在地導(dǎo)致致堆上創(chuàng)建建的對(duì)象和和棧上創(chuàng)建建的對(duì)象的的行為不一一致。因此此,C類的的對(duì)象一定定要在堆上上創(chuàng)建。很明顯,當(dāng)當(dāng)一個(gè)堆上上的C類對(duì)對(duì)象不再被被需要時(shí),我我們需要消消耗它。 一個(gè)C類類的對(duì)象可可能以兩種種方式存在在:其它類類的指針成成員變量或或是一個(gè)局局部的針指指變量。在在前一種情情況下,我我們可以在在類的析構(gòu)構(gòu)方法中調(diào)調(diào)用dellete來來刪除它;后一種情情況要復(fù)雜雜一些,在在調(diào)用任何何有潛在的的異常(lleavee)的代碼碼之前,要要把這個(gè)指指針放到清清除棧(ccleannup sstackk)中,否否則有可能能發(fā)生內(nèi)存存泄露。CCB
12、asee 類聲明明了私有的的拷貝構(gòu)造造方法和賦賦值操作(=)。這是是一個(gè)很好好的策略,它它可以用來來防止客戶戶代碼不小小心地使用用了淺拷貝貝或賦值的的方法。由由于基類的的拷貝構(gòu)造造和賦值是是私有的,所所以,如果果您希望您您的類可以以能夠使用用拷貝構(gòu)造造方法,您您必須顯式式地聲明和和定義拷貝貝構(gòu)造方法法和賦值操操作。但是是,考慮到到C類的特特性,深拷拷貝可能造造成發(fā)生異異常(leeave)的的隱患,而而您絕對(duì)不不能讓類的的構(gòu)造方法法(或析構(gòu)構(gòu)方法)發(fā)發(fā)生異常(我我們在本教教程的后面面解釋原因因)。所以以,如果您您確實(shí)需要要一個(gè)拷貝貝的方法,那那么您可以以為類添加加一個(gè)的可可能會(huì)發(fā)生生異常的方方法
13、來完成成同樣的任任務(wù),例如如:ClooneL()或CoopyL()。如果果您提供的的這個(gè)類是是從CBaase派生生的,您就就不必為了了防止客戶戶代碼使用用有潛在安安全問題的的“淺”拷貝,而而在代碼中中將這些方方法聲明為為私有的。R 類前綴“R” 在這里里代表資源源(Ressourcce), 通常是外外部資源,例例如:文件件的句柄(hhandlle)。 和C類不同同,Symmbiann系統(tǒng)中不不存在一個(gè)個(gè)對(duì)應(yīng)的RRBasee類,所以以一個(gè)R類類應(yīng)當(dāng)有一一個(gè)構(gòu)造方方法來將它它的資源句句柄置為00,表明還還沒有資源源和這個(gè)新新建的對(duì)象象關(guān)聯(lián)在一一起。但是是,不要在在構(gòu)造方法法中初始化化資源句柄柄,因
14、為這這樣有可能能使構(gòu)造方方法產(chǎn)生異異常。R類類中常常有有類如Oppen(), Crreatee() 或或 Iniitiallize()這樣的的方法,它它們用來分分配資源,設(shè)設(shè)置句柄成成員變量的的值,并返返回錯(cuò)誤代代碼或是產(chǎn)產(chǎn)生異常。 R類通通常也有對(duì)對(duì)應(yīng)的Cllose()或或Reseet()類類,用來釋釋放資源,重重置句柄的的值-表表明沒有資資源和該對(duì)對(duì)象關(guān)聯(lián)。使用R類類時(shí),一個(gè)個(gè)常見的錯(cuò)錯(cuò)誤是忘記記調(diào)用它的的Closse()方方法(當(dāng)然然,該方法法也可以是是其它名字字,但它經(jīng)經(jīng)常被命名名為Cloose()或或是有一個(gè)個(gè)析構(gòu)方法法釋放資源源,這會(huì)引引起資源的的泄露。R類通常都都很小,除除了資源
15、句句柄沒有其其它的成員員變量。因因?yàn)椴恍枰Kǔ3R矝]有析析構(gòu)方法,資資源的釋放放都是在CClosee()方法法中進(jìn)行的的。大多數(shù)數(shù)情況下,RR類都是作作為類的成成員變量或或局部變量量存在的。只有少數(shù)數(shù)情況下,在在堆上創(chuàng)建建。您必須確保保,當(dāng)程序序發(fā)后異常常的時(shí)候,資資源能被正正確地釋放放-通常常是使用資資源棧。如如果一個(gè)RR類是一個(gè)個(gè)堆上的自自動(dòng)變量(相相對(duì)于成員員變量),您您一但要保保證資源被被釋放,而而且,變量量本身也要要被釋放。typiccallyy by usinng twwo puush ccallss: ClleanuupCloosePuushL(), oor assimil
16、lar ffuncttion,to eensurre thhat tthe rresouurce is ccleanned uup, aand aa staandarrd ClleanuupStaack:PushhL(TAAny*) whiich ssimplly caalls Userr:Frree() on the heapp celll.R類的成員員變量通常常都很簡單單,所以一一般不需要要深拷貝(bbitwiise ccopy)。R類的拷拷貝可能會(huì)會(huì)引起混亂亂(想象一一下:如果果兩個(gè)對(duì)象象同時(shí)在一一個(gè)資源句句柄上調(diào)用用Closse()方方法,或兩兩個(gè)對(duì)象都都沒有釋放放資源,會(huì)會(huì)發(fā)生什么么
17、情況?)如如果,您想想阻止任何何對(duì)R類的的拷貝,您您應(yīng)當(dāng)聲明明(但不定定義)一個(gè)個(gè)私有的構(gòu)構(gòu)造方法和和賦值操作作。M 類當(dāng)提到多繼繼承的時(shí)候候,它意味味著從一個(gè)個(gè)主要的類類派生,同同時(shí)也混雜雜基它類的的功能。前前綴M是單單詞Mixxin的首首字母。SSymbiian系統(tǒng)統(tǒng)不贊成多多繼承的做做法,因?yàn)闉檫@個(gè)引入入額外的復(fù)復(fù)雜性,MM類是一個(gè)個(gè)抽象類,它它的作用相相當(dāng)于jaava中的的接口(iinterrfacee)。在SSymbiian系統(tǒng)統(tǒng)中,M 類常被用用來定義回回調(diào)接口或或者是觀察察者(obbservver)類類。M類也也可以被其其它類繼承承。下面我我們給出兩兩個(gè)例子。classs MAn
18、iimalpubllic:virttual voidd EatLL() =0;classs MDommestiicAniimal : puublicc MAniimalpubllic:virttual voidd NameeL() =0;classs CCatt : puublicc CBasse, pubblic MDommestiicAniimalpubllic:virttual voidd EatLL(); / 從MAniimal, 經(jīng)過MDoomestticAnnimall繼承virttual voidd NameeL(); / 從 MDoomestticAnnimall繼承/ OOt
19、herr funnctioons oomittted ffor cclariity;上面的例子子演示了一一個(gè)從CBBase類類和一個(gè)MM類派生的的具體類。而類MDDomessticAAnimaal又是從從MAniimal派派生的。象象接口一樣樣,由于不不能被實(shí)例例化,M類類只能有虛虛(virrtuall)函數(shù),不不能有成員員變量和構(gòu)構(gòu)造方法。但它可以以有析構(gòu)方方法, 條條件是,實(shí)實(shí)現(xiàn)它的具具體類必須須是從CBBase派派生的。在在定義完類類以后,然然后可以用用使用它。代碼如下下:CCat *cat11 = neww CCaat;delette ccat1; /正確然下面的代代碼卻是錯(cuò)錯(cuò)誤的。M
20、Animmal *cat22 = neew CCCat;delette ccat1; /錯(cuò)誤當(dāng)用M類的的指針引用用一個(gè)對(duì)象象的時(shí)候,如如果用deeletee刪除這個(gè)個(gè)指針,則則這個(gè)M類類必須提供供一個(gè)虛擬擬的析構(gòu)方方法,否則則會(huì)出現(xiàn)系系統(tǒng)異常(ppanicc codde 422)。將MMAnimmal的代代碼改寫,則則上面代碼碼沒有問題題。classs MAniimalpubllic:virttual voidd EatLL() =0;virttual MAnnimall(); /增加一一個(gè)虛的析析構(gòu)方法。;3描述符(descriptor)在Symbbian 系統(tǒng)中,字字符串被稱稱為“描述符”
21、(desscripptor),因因?yàn)樗鼈兪鞘亲晕颐枋鍪龅摹T诿杳枋龇斜14媪怂硎镜淖肿址拈L長度和它的的底層的內(nèi)內(nèi)存布局的的信息。描描述符比標(biāo)標(biāo)準(zhǔn)C中的的字符數(shù)組組和字符指指針要復(fù)雜雜,您可能能需要多花花些時(shí)間來來學(xué)習(xí)和掌掌握它的用用法。關(guān)鍵鍵是,它們們的特殊設(shè)設(shè)計(jì)使得它它們在少量量內(nèi)存的設(shè)設(shè)備上非常常有效率,僅僅用非常少少的內(nèi)存就就可以保存存自己的長長度和內(nèi)存存布局的信信息?,F(xiàn)在在,讓我們們來深入了了解描述符符的設(shè)計(jì)思思想。在Symbbian系系統(tǒng)中,描描述符是相相當(dāng)讓人迷迷惑的,因因?yàn)樗姆N種類繁多。不同種類類的描述符符具有不同同的特性和和用法,但但又經(jīng)常能能相互轉(zhuǎn)換換。它們不不
22、同于標(biāo)準(zhǔn)準(zhǔn)C+中中的strring,javaa語言中的的striing類或或MFC中中的CSttringg,因?yàn)槌坛绦騿T必須須自己管理理底層的內(nèi)內(nèi)存分配和和清除工作作。它們具具有防治內(nèi)內(nèi)存溢出的的機(jī)制,并并且不依賴賴NULLL終結(jié)符號(hào)號(hào)來決定字字符串的長長度,從這這方而來講講,它也不不同于C語語言中的字字符串。現(xiàn)在我們來來討論:什什么是描述述符?它們們是如何工工作的?在在探討這些些不同的描描述符之前前,先讓我我們需要弄弄清楚一個(gè)個(gè)基本的概概念:什么么是字符串串?dāng)?shù)據(jù)的“寬度”?這個(gè)長長度指的是是單個(gè)字符符是8biit的,還還是16bbit的寬寬度。在早早期的版本本中,字符符的寬度都都是8biit
23、的,后后來為了支支持Uniicodee字符集,從從第5版起起,Symmbiann系統(tǒng)將116bitt 的字符符作為標(biāo) 準(zhǔn)。Syymbiaan系統(tǒng)現(xiàn)現(xiàn)在支持這這兩種字符符長度的描描述符,除除了Coppy()和和Sizee()兩個(gè)個(gè)方法以外外,這兩種種寬度的描描述符的行行為是完全全一致的,這這兩個(gè)方法法的使用,我我們后面再再介紹。另另外,有一一套中立的的描述符類類型,它們們既可以被被定義為窄窄的描述符符類型,也也可以被定定義為寬的的描述符類類型,這要要取決于編編譯時(shí)的寬寬度。您可可以從它的的名字上很很容易看出出這個(gè)類型型所表示的的寬度。假假如,它以以8結(jié)尾(例例如:TPPtr8,就就意味著它它表示
24、是的的8bitt的窄字符符,而以116結(jié)尾的的描述符類類(例如:TPtrr16)則則操作166bit的的寬字符。 對(duì)中立立(neuutrall)的類型型來講,沒沒有數(shù)字結(jié)結(jié)尾(例如如:TPttr),在Symmbiann系統(tǒng)第55版以后,默默認(rèn)的情況況下,它們們表示寬度度為16bbit的字字符串。它它們之間的的關(guān)系比較較類似于TTInt,TTInt116或TIInt322 之間的的關(guān)系,這這一點(diǎn)應(yīng)當(dāng)當(dāng)是比較易易于理解的的。一般情況下下,您沒有有必要指明明是字符串串的寬度,用用中立的類類型就可以以了,這樣樣使你的代代碼易于在在寬字符版版本和窄字字符版本之之間轉(zhuǎn)換(有有過編程經(jīng)經(jīng)驗(yàn)的朋友友應(yīng)該有這這
25、樣的印象象,我們平平常寫代碼碼,大多情情況下,僅僅僅使用UUINT類類型,而較較少考慮使使用UINNT16,UUINT332類型)。另外一個(gè)問問題是:描描述符和字字面量(lliterral)的的區(qū)別。所所謂字面量量是指在編編碼的時(shí)候候就已經(jīng)確確定的量,例例如,標(biāo)準(zhǔn)準(zhǔn)C中的 char* p = Heello worlld;其中的HHelloo worrld就就是字面量量。在Syymbiaan系統(tǒng)中中,對(duì)它們們的處理是是很不一樣樣的,這點(diǎn)點(diǎn)我們在后后面再介紹紹。有了這樣的的一些認(rèn)識(shí)識(shí), 現(xiàn)在在我們可以以來看看有有哪些描述述符類型。在Symmbiann系統(tǒng)中描描述符類型型有兩大種種類:不可可修改(n
26、non-mmodiffiablle)的描描述符和可可修改(mmodiffiablle)的描描述符。3.1不可可修改(nnon-mmodiffiablle)的描描述符 在Symbbian系系統(tǒng)中,所所有的描述述符都繼承承自TDeesC,在在前面我們們已經(jīng)討論論了類名前前綴T所代代表的意義義,在這里里,我們更更關(guān)心類名名的后綴CC所代表的的意義,這這個(gè)C是單單詞Connstannt的首字字符,表示示這個(gè)類是是不可更改改的。這個(gè)個(gè)類提供了了一些用來來返回字符符串的長度度和操作數(shù)數(shù)據(jù)的方法法。Lenngth()方方法返回了了描述符的的長度,因因?yàn)?,每個(gè)個(gè)描述符對(duì)對(duì)象在內(nèi)存存中的布局局都是同樣樣的,用4
27、4個(gè)字節(jié)來來表示它所所包含的數(shù)數(shù)據(jù)的長度度(實(shí)際上上,只用了了32個(gè)bbit中的的28個(gè)bbit,剩剩余的4bbit留作作它用,所所以描述符符能表示的的最大的長長度為2228 字字節(jié),2556 MBB,不過這這已經(jīng)足夠夠了)。所所以,Leengthh()方法法沒有被它它的子類重重寫,它對(duì)對(duì)所有子類類都有效。但是,根根據(jù)實(shí)現(xiàn)子子類的方法法的不同,子子類訪問數(shù)數(shù)據(jù)的方式式也不一樣樣,Symmbiann系統(tǒng)不要要求它的子子類通過虛虛函數(shù)的方方式來實(shí)現(xiàn)現(xiàn)自己的訪訪問數(shù)據(jù)的的方法。 不用虛函函數(shù)重寫的的原因是因因?yàn)椋摵瘮?shù)會(huì)給每每個(gè)被派生生的描述符符對(duì)象增加加4節(jié)字的的額外負(fù)擔(dān)擔(dān),c+用這4個(gè)個(gè)字節(jié)來
28、存存放指向虛虛函數(shù)表的的指針。我我們前面說說過,在設(shè)設(shè)計(jì)描述符符的時(shí)候要要讓它盡可可能高效,額額外的字節(jié)節(jié)開銷被認(rèn)認(rèn)為是不理理想的。存存放長度的的4個(gè)字節(jié)節(jié)中,288bit用用來表示長長度,剩下下的4biit用來表表示描述符符的類型。目前,ssymbiian系統(tǒng)統(tǒng)中有5種種派生的描描述符類型型,4biit限制了了描述符的的種類最多多只能有116種,但但這已經(jīng)足足夠了。子子類可以通通過調(diào)用基基類TDeesC的PPtr()方方法來訪問問描述符的的數(shù)據(jù),PPtr()方法檢查查這4個(gè)bbit,確確定描述符符的類型并并返回它的的數(shù)據(jù)在內(nèi)內(nèi)存中的地地址。當(dāng)然然,這要求求TDessC基類清清楚它的子子類的內(nèi)
29、存存布局,并并在Ptrr()方法法中使用硬硬編碼的方方法。后面面,為了表表述上的方方便,我們們也把這種種不可修改改的描述符符也稱為常常量描述符符(connstannt deescriiptorr)總結(jié):不可可修改的描描述符類TTDesCC是所有的的非字面量量描述符的的基類,它它提供了確確定描述符符長度和訪訪問數(shù)據(jù)的的方法,另另外,它實(shí)實(shí)現(xiàn)了所有有的您想用用來處理常常量字符串串的操作。3.2可修修改(moodifiiablee)的描述述符所有的可修修改的描述述符都從TTDes基基類派生,而而TDess本身又是是從TDeesC派生生的。TDDes有一一個(gè)額外的的成員變量量用來存放放為該描述述符分配
30、數(shù)數(shù)據(jù)的最大大長度。MMaxLeengthh()方法法返回了這這個(gè)最大的的長度。像像TDessC中的LLengtth()方方法一樣,MMaxLeengthh()方法法也不被TTDes的的子類繼承承。TDess類提供了了一系列的的方法, 用來對(duì)可可修改字符符串?dāng)?shù)據(jù)的的操作,包包括對(duì)字符符串的附加加、填充和和格式化操操作。所有有的這些方方法都被派派生類繼承承,派生類類只實(shí)現(xiàn)一一些特定的的構(gòu)造方法法和復(fù)制賦賦值的方法法。這些方方法都不負(fù)負(fù)責(zé)分配內(nèi)內(nèi)存,假如如它們超過過了描述符符的數(shù)據(jù)長長度,例如如,用Apppendd()方法法在某個(gè)字字符串后面面附加另一一個(gè)字符串串時(shí),在調(diào)調(diào)用該方法法之前,您您必須
31、確保保有足夠的的內(nèi)存空間間。當(dāng)然,只只要不超過過描述符的的最大存儲(chǔ)儲(chǔ)容量,描描述符的長長度可以自自由地伸縮縮。當(dāng)描述述符長度比比最大長度度短的時(shí)候候,描述符符的后面部部分是多余余未用的。這些方法法使用了斷斷言(assserttion)來來確保描述述符的最大大長度不會(huì)會(huì)被超出。如果發(fā)生生內(nèi)存溢出出,將會(huì)產(chǎn)產(chǎn)生一個(gè)ppanicc(關(guān)于ppanicc,我們將將在后面的的章節(jié)介紹紹),這樣樣可以方便便您檢查和和修正程序序的錯(cuò)誤。事實(shí)上,不不可能使描描述符溢出出,這一點(diǎn)點(diǎn)保證了您您代碼的強(qiáng)強(qiáng)壯性,而而且不易產(chǎn)產(chǎn)生難以跟跟蹤的內(nèi)存存陷阱。但需要注意意的是,由由于基類的的構(gòu)造方法法是prooteceed類型
32、的的,所以您您無法直接接實(shí)例化一一個(gè)TDeesC或TTDes類類的實(shí)例?,F(xiàn)在我們們來看看描描述符的派派生類,您您可以實(shí)例例化和使用用派生類的的對(duì)象。正正如前面所所說,這個(gè)個(gè)地方是比比較讓人迷迷惑的,因因?yàn)槊枋龇嬖诖罅苛康呐缮愵悺?前面面,我們已已經(jīng)解釋過過為什么每每個(gè)類會(huì)有有三個(gè)不同同的版本,例例如:TDDes8, TDees16 和 TDDes,分分別對(duì)應(yīng)窄窄字符,寬寬字符和中中立的類?,F(xiàn)在,讓讓我們看看看有哪些主主要的描述述符類型,在在深入討論論每種類型型的細(xì)節(jié)之之前,我們們先考察一一下它們在在一般情況況下的內(nèi)存存布局。描描述符有兩兩種基本的的內(nèi)存布局局:指針描描述符和緩緩存區(qū)描述述
33、符。不同同之處在于于,指針描描述符持有有一個(gè)指向向字符串的的指針,而而這個(gè)字符符串存儲(chǔ)在在內(nèi)存中的的基它位置置。與指針針描述符不不同,緩存存區(qū)描述符符本身持有有字符數(shù)據(jù)據(jù),也就是是說字符數(shù)數(shù)據(jù)本身構(gòu)構(gòu)成了描述述符的一部部分??偨Y(jié):TDDes 是是所有的可可修改的描描述符的基基類, 并并且它自己己也是從TTDesCC派生的。它有一個(gè)個(gè)能返回最最大的內(nèi)存存容量的方方法和一系系列的用來來修改字符符串?dāng)?shù)據(jù)的的方法。3.3 指指針描述符符(poiinterr desscripptor)指針描述符符可分為兩兩種:TPPtrC 和TPtrr(我們前前面說過,每每種類型的的描述符,按按照字符寬寬度,都可可以分
34、為三三個(gè)版本,例例如:窄字字符版本TTPtrCC8,寬字字窄版本TTPtrCC16和中中立的版本本TPtrrC,所以以嚴(yán)格來講講,有六種種指針描述述符)。指指針描述符符所持有的的字符串是是跟描述符符本身分開開來存放的的,它可以以被存儲(chǔ)在在ROM中中,堆中或或棧中。由由于保存數(shù)數(shù)據(jù)的內(nèi)存存既不為描描述符所擁擁有,也不不通過它來來管理。所所以,如果果要該描述述符是在堆堆上分配的的,那么應(yīng)應(yīng)通過堆描描述符(HHBufCC,下面將將要講解)來來操作內(nèi)存存的分配和和銷毀;如如果指針描描述符所指指向的字符符串是在棧棧上分配的的,那這個(gè)個(gè)內(nèi)存必須須是已經(jīng)在在棧上分配配好的。通通常情況下下,指針描描述符是基基
35、于棧的,但但有時(shí)候,它它們也可以以在堆上使使用,例如如:作為一一個(gè)CBaase派生生類的成員員變量的時(shí)時(shí)候。在不不可修改的的描述符(TTPtrCC)中,指指向數(shù)據(jù)的的指針存放放在長度的的后面,因因此,指針針描述符的的總長度為為2個(gè)字(wword);在可修改改的指針描描述符中,它它存放在最最大長度的的后面,因因此,總長長度為3個(gè)個(gè)字。下圖圖比較了TTPtr和和TPtrrC內(nèi)存布布局.iLength(12)iMaxLengthiPtrHello world!iLength(12)iPtrTPtrCTPtr TPtrCCTPtrCC相當(dāng)于CC語言中的的consst chhar*。被它指向向的數(shù)據(jù)可可
36、以被訪問問但不能被被修改:也也就是說,描描述符中的的數(shù)據(jù)是常常量。所有有的從基類類TDessC中繼承承的操作都都是可訪問問的。TPPtrC定定義了一系系列的構(gòu)造造方法,使使得它能從從其它的描描述符、指指向內(nèi)存的的指針或以以0結(jié)尾的的C語言字字符串構(gòu)造造。/ 字面面量描述符符將在后面面介紹_LIT(KLitterallDes, Siixty zipppers weree quiicklyy piccked fromm thee wovvenjute bag);TPtrCC panngrammPtr(KLitterallDes); / 從字面面量描述符符構(gòu)造TPtrCC coppyPtrr(pan
37、ngrammPtr); / 從其它它的描述符符構(gòu)造TBufCC coonstBBuffeer(KLLiterralDees); / 常常量緩存區(qū)區(qū)描述符,后后面介紹TPtrCC ptrr(connstBuufferr); / Coonstrructeed frrom aa TBuufC/ TTText88 is a siinglee (8-bit) chaaractter, equiivaleent tto unnsignned ccharconstt TTeext8* cSttringg = (TTexxt8*)Walltz, bad nympph, ffor qquickk jiggsve
38、x;/ 從以以0結(jié)尾的的字符串構(gòu)構(gòu)造TPtrCC8 annotheerPtrr(cSttringg);TUintt8* mmemorryLoccatioon; / Poointeer innto mmemorry innitiaalizeed ellsewhhereTInt lenggth; / LLengtth off memmory to bbe reepressenteed.TPtrCC8 meemPtrr(memmoryLLocattion,lenggth); / 從一個(gè)指指針構(gòu)造。這個(gè)指針本本身可以改改變成指向向其他的字字符串?dāng)?shù)據(jù)據(jù)(通過SSet()方方法)。如如果您想指指明,不能能
39、改變您的的TPtrrC所指向向的數(shù)據(jù),那那么您可以以將TPttrC聲明明為connst,這這樣,當(dāng)您您試圖用SSet()方方法更改TTPtrCC所指向的的數(shù)據(jù)時(shí),編編譯器會(huì)產(chǎn)產(chǎn)生警告。/ 字面面量描述符符_LIT(KLitterallDes11, SSixtyy zippperss werre quuicklly piickedd froom thhe wooven juteebag);_LIT(KLitterallDes22, WWaltzz, baad nyymph, forr quiick jjigs vex);TPtrCC alppha(KKLiteeralDDes1);TPtrCC
40、betta(KLLiterralDees2);alphaa.Sett(KLiiteraalDess2); / aalphaa poiints to tthe ddata in KKLiteeralDDes2beta.Set(KLitterallDes11); / beeta ppointts too thee datta inn KLiiteraalDess1constt TPttrC ggammaa(betta); / PPointts too thee datta inn betta, KKLiteeralDDes1gammaa.Sett(alppha); / Geneeratees a
41、warnning, butt poiints to aalphaa這里應(yīng)當(dāng)加加一些示范范代碼TPtrTPtr 是可修改改的指針描描述符,它它可用來訪訪問和修改改字符串或或二進(jìn)制數(shù)數(shù)據(jù)。TDDesC 和TDees所提供供的所有的的操作都適適用于TPPtr。這這個(gè)類定義義了一些構(gòu)構(gòu)造方法,使使得它能從從指向內(nèi)存存的指針構(gòu)構(gòu)造,并設(shè)設(shè)置適當(dāng)?shù)牡拈L度值和和最大長度度值。編譯器也會(huì)會(huì)產(chǎn)生隱式式的構(gòu)造方方法和拷貝貝構(gòu)造方法法,因?yàn)樗鼈儧]有被被聲明為保保護(hù)的或私私有的。一一個(gè)TPttr對(duì)象可可以從其它它的可修改改描述符構(gòu)構(gòu)造,例如如:通過在在不可修改改的描述符符上調(diào)用DDes()方方法,這個(gè)個(gè)方法返回回一
42、個(gè)如下下所示的TTPtr對(duì)對(duì)象:_LIT(KLitterallDes11, JJackddaws lovee my big sphiinx oof quuartzz);TBufCC buff(KLiiteraalDess1); / TTBufCC aree desscribbed llaterrTPtr ptr(buf.Des(); / CCopy consstrucctionn; caan moodifyy thee datta inn buffTInt lenggth = ptrr.Lenngth(); / Leengthh = 337TInt maxLLengtth = ptr.MaxL
43、Lengtth(); / Maxiimum lenggth = 60, as for bufTUintt8* mmemorryLoccatioon; / Vaalid poinnter intoo memmory.TInt len = 122; / Lenngth of ddata to bbe reepressenteedTInt maxLLen = 32; / Maxiimum lenggth tto bee reppreseentedd/ Coonstrruct a poointeer deescriiptorr froom a poinnter intoo memmoryTPtr88
44、memmPtr(memooryLoocatiion, maxLLen); / lenggth = 0, max lenggth = 32TPtr88 memmPtr22(memmoryLLocattion, lenn, maaxLenn); / leengthh = 112, mmax = 32另外,TPPtr提供了了賦值運(yùn)算算符=(),用來拷拷貝數(shù)據(jù)到到指針?biāo)钢赶虻膬?nèi)存存(數(shù)據(jù)源源可以是可可修改、不不可修改的的指針描述述符,或以以0結(jié)尾的的字符串)。如果要拷拷貝的數(shù)據(jù)據(jù)的長度超超過了描述述符的最大大長度,會(huì)會(huì)引發(fā)一個(gè)個(gè)系統(tǒng)異常常。像TPPtrC一一樣,TPPtr也定定義了一個(gè)個(gè)Set()方
45、方法,用來來改變描述述符所指向向的數(shù)據(jù)。_LIT(KLitterallDes11, JJackddaws lovee my big sphiinx oof quuartzz);TBufCC buff(KLiiteraalDess1); / TTBufCC aree desscribbed llaterrTPtr ptr(buf.Des(); / PPointts too thee conntentts off buffTUintt16* memooryLoocatiion; / VValidd poiinterr intto meemoryy.TInt maxLLen = 40; / Maxi
46、imum lenggth tto bee reppreseenteddTPtr memPPtr(mmemorryLoccatioon, mmaxLeen); / llengtth = 12, max lenggth = 40/ Coopy aand rreplaacememPttr = ptr; / memPPtr ddata is KKLiteeralDDes1 (37 bytees), maxLLengtth = 40_LIT(KLitterallDes22, TThe qquickk broown ffox jjumpss oveer thhe laazy ddog);TBufCC bu
47、uf2(KKLiteeralDDes2); / TBuufC aare ddescrribedd latterTPtr ptr22(buff2.Dees(); / Poiints to tthe ddata in bbuf/ Reeplacce whhat pptr ppointts tooptr.SSet(pptr2); / ptrr poiints to cconteents of bbuf2, maxx lenngth = 1000memPttr = ptr22; / Atttemptt to updaate mmemPttr whhich paniics bbecauuse tthe/
48、 coontennts oof pttr2 (43 bbytess) exxceedds maax leengthh of memPPtr (40 bbytess)您一定不要要混淆了SSet()方方法和=()賦值操操作。前者者將描述符符的指針重重置,使它它指向新的的數(shù)據(jù)區(qū)域域,而后者者將數(shù)據(jù)拷拷貝到描述述符中,一一般來說,這這會(huì)更改描描述符的長長度,但不不會(huì)更改它它的最大長長度值。3.5 基基于棧(sstackk-bassed)的的緩沖區(qū)描描述符基于緩沖區(qū)區(qū)的描述符符也可以分分為可修改改的TBuuf和不可可修改TBBufC的的兩種類型型。對(duì)這種種描述符來來講,字符符串?dāng)?shù)據(jù)本本身就是描描述符的一
49、一部分。下下圖給出了了描述符的的內(nèi)存布局局:iLength 12iMaxLengthHello World!TBufiLength 12Hello World!TBufC這兩種描述述符通常用用來存儲(chǔ)定定長的或相相對(duì)較小的的字符串,常常用來存放放長度小于于256個(gè)個(gè)字符的文文件名。類類似于C語語言中的cchar,但是是,它們具具有檢查內(nèi)內(nèi)存溢出的的功能。TBufCCTBufCC是不不可修改的的緩沖區(qū)類類型,它主主要用來存存放字符串串常量或是是二進(jìn)制數(shù)數(shù)據(jù)。該類類從TBuufCBaase類派派生,尖括括號(hào)內(nèi)內(nèi)的數(shù)字表表示分配給給該描述符符的數(shù)據(jù)區(qū)區(qū)的大小。它定義了了一些構(gòu)造造方法,允允許從其它它的
50、描述符符或以0結(jié)結(jié)尾的字符符串構(gòu)造。也允許創(chuàng)創(chuàng)建一個(gè)空空的描述符符,然后再再填充。由于該描述述符的數(shù)據(jù)據(jù)是不可修修改的,它它的整個(gè)內(nèi)內(nèi)容可以被被置換(通通過該類的的所定義的的賦值操作作),用來來置換的數(shù)數(shù)據(jù)可以是是其它的不不可修改的的描述符或或是0結(jié)尾尾的字符串串,但是,無無論是何種種情況,新新數(shù)據(jù)的長長度都不能能超過長度度n(也就就是創(chuàng)建該該類的時(shí)候候指定的模模板參數(shù))。_LIT(KPallindrrome, Saatan, osccillaate mmy meetalllic ssonattas);TBufCC buff1(KPPalinndromme); / CConsttructted
51、 ffrom liteeral desccripttorTBufCC buff2(buuf1); / Consstruccted fromm buff1/ Coonstrructeed frrom aa NULLL-teerminnatedd C sstrinngTBufCC buff3(TTTextt*)NNeverr oddd or evenn);TBufCC buff4; / Coonstrructeed emmpty, lenngth = 0/ Coopy aand rreplaacebuf4 = buuf1; / bbuf4 conttainss datta coopiedd fro
52、om buuf1, lenggth mmodiffiedbuf1 = buuf3; / bbuf1 conttainss datta coopiedd froom buuf3, lenggth mmodiffiedbuf3 = buuf2; / PPanicc! Maax leengthh of buf33 is insuufficcientt forr buff2 daata該描述符中中的數(shù)據(jù)可可以被整體體置換,但但不能被直直接修改,但但有時(shí)候我我們的確需需要修改緩緩存區(qū)中的的數(shù)據(jù),該該怎么辦呢呢?系統(tǒng)提提供了另一一種途徑來來修改數(shù)據(jù)據(jù)。該類定定義了Dees()方方法,它為為緩存區(qū)中中的數(shù)據(jù)
53、返返回一個(gè)可可修改的指指針描述符符(TPttr)。我我們可以通通過這個(gè)指指針描述符符間接地修修改緩沖區(qū)區(qū)中的數(shù)據(jù)據(jù)。當(dāng)數(shù)據(jù)據(jù)通過指針針描述符被被修改以后后,指針描描述符和緩緩沖區(qū)描述述符中的iiLenggth的值值會(huì)跟著改改變,但要要記住,緩緩存區(qū)描述述符的長度度值只可能能減小,而而是不可能能增大的,因因?yàn)?,描述述符類是不不提供?nèi)存存管理管理理功能的。_LIT88(KPaalinddromee, SSatann, osscilllate my mmetalllic sonaatas);TBufCC8 buuf(KPPalinndromme); / CConsttructted ffrom li
54、teeral desccripttorTPtr88 ptrr(buff.Dess(); / dataa is the striing iin buuf, mmax llengtth = 40/ Illlusttratees thhe usse off ptrr to copyy andd repplacee conntentts off buffptr = (TTText88*)DDo Geeese see God?;ASSERRT(pttr.Leengthh()=buf.Lenggth();_LIT88(KPaalinddromee2, Are we nnot ddrawnn onwward
55、, we few, draawn oonwarrd toonew eera?);ptr = KPaalinddromee2; / Paanic! KPaalinddromee2 exxceedds maax leengthh of ptr(=40)TBuf這也是一個(gè)個(gè)模板類,它它是一個(gè)可可修改的緩緩沖區(qū)描述述符類,后后面的表示緩緩沖區(qū)大小小。TBuuf從TBBufBaase類派派生,而TTBufBBase是是從TDees派生的的,因此,它它繼承了TTDes和和TDessC類所有有的方法。像TBuufC一樣,TBuff也也定義了一一系列的構(gòu)構(gòu)造方法和和賦值操作作。對(duì)所有有的描述符符類型來講講,內(nèi)
56、存管管理是您的的責(zé)任,盡盡管這個(gè)緩緩沖區(qū)中的的數(shù)據(jù)是可可修改的,但但它的長度度不能超過過在構(gòu)造方方法中所給給定的最大大值(n)。假如緩沖沖區(qū)的內(nèi)容容需要擴(kuò)展展,那么您您必須決定定是在編譯譯的時(shí)候就就給定一個(gè)個(gè)足夠大的的值,或是是在運(yùn)行的的時(shí)候動(dòng)態(tài)態(tài)分配內(nèi)存存。但無論論哪種情況況,都要確確保數(shù)據(jù)長長度不要超超過緩存區(qū)區(qū)的最大長長度。如果需要使使用動(dòng)態(tài)分分配的內(nèi)存存,您可以以使用基于于堆的描述述符,這個(gè)個(gè)我們在后后面要講到到。要是您您覺得管理理內(nèi)存分配配的任務(wù)太太過繁重,您您也可以選選擇使用動(dòng)動(dòng)態(tài)數(shù)組。不過,您您應(yīng)當(dāng)記住住,使用動(dòng)動(dòng)態(tài)數(shù)組的的額外開銷銷是很高的的。_LIT(KPallindrrom
57、e, Saatan, osccillaate mmy meetalllic ssonattas);TBuf buf11(KPaalinddromee); / Coonstrructeed frrom lliterral ddescrriptoorTBuf buf22(buff1); / CConsttructted ffrom consstantt bufffer desccripttorTBuf88 buff3(TTTextt8*)Do GGeesee seee Godd?); / fromm C sstrinngTBuf buf44; / Connstruuctedd emppty, le
58、nggth = 0, maxiimum lenggth = 40/ Illlusttratee coppy annd reeplaccebuf4 = buuf2; / bbuf2 copiied iinto buf44, uppdatiing llengtth annd maax leengthhbuf3 = (TTTextt8*)Murdder ffor aa jarr of red rum; / upddatedd froom C striing3.6 基基于堆的(HHeap-Baseed)緩沖沖區(qū)描述符符當(dāng)您要使用用非常長的的字符串時(shí)時(shí),有另外外一種選擇擇:基于堆堆的描述符符。它能擁擁有
59、比它的的創(chuàng)建者更更長的生存存期。當(dāng)您您在編譯的的時(shí)候還不不能確定緩緩沖區(qū)長度度的時(shí)候,堆堆描述符也也是很有用用的,這時(shí)時(shí),它的作作用相當(dāng)于于C語言中中的mallloc。HBufCC也許您已經(jīng)經(jīng)發(fā)現(xiàn),HHBufCC的類名以以“H”開頭,這這不符合SSymbiian系統(tǒng)統(tǒng)中慣用的的命名習(xí)慣慣。這的確確是一個(gè)特特例,“H”表示這個(gè)個(gè)類一般是是在堆(HHeap)上上分配的。HBuffC定義了了靜態(tài)的NNewL()方方法,用來來在堆上創(chuàng)創(chuàng)建一個(gè)緩緩存區(qū)。正正如您所見見到,HBBufC中中的字母“C”表示這個(gè)個(gè)表述符是是不可修改改的。對(duì)該該類的操作作幾乎和TTBufCC一一樣:該類類提供了一一套賦值操操作
60、,允許許整個(gè)緩沖沖區(qū)中的內(nèi)內(nèi)容被替換換掉;同樣樣,新內(nèi)容容的長度不不能超過緩緩存區(qū)的大大小,否則則會(huì)引起系系統(tǒng)異常;通過調(diào)用用Des()方法,可可以返回一一個(gè)可修改改的指針描描述符(TTPtr),可可以通過這這個(gè)指針描描述符來更更改緩沖區(qū)區(qū)中的內(nèi)容容。_LIT(KPallindrrome, Doo Geeese ssee GGod?);TBufCC staackBuuf(KPPalinndromme);/ Alllocaates an eemptyy heaap deescriiptorr of max lenggth 220HBufCC* heeapBuuf = HBuffC:NNewLCC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2021年廣東省河源市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年廣西壯族自治區(qū)百色市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年四川省攀枝花市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024版工業(yè)制成品供應(yīng)協(xié)議范例版
- 2024年速遞公司物流合作協(xié)議:保障權(quán)益的范例3篇
- 2024版養(yǎng)老財(cái)務(wù)支持合同
- 2024正規(guī)二手房交易合同附帶裝修增值服務(wù)3篇
- 2024年預(yù)制件加工與裝配式建筑構(gòu)件研發(fā)生產(chǎn)合同3篇
- 勞務(wù)派遣管理協(xié)議書
- 勞動(dòng)仲裁公司合同范本(2篇)
- 制造業(yè)智能制造工廠布局方案
- 10《吃飯有講究》教學(xué)設(shè)計(jì)-2024-2025學(xué)年道德與法治一年級(jí)上冊統(tǒng)編版
- 2024年中考數(shù)學(xué)二輪復(fù)習(xí)二次函數(shù)綜合(含答案)
- 拆除鋁合金門窗及附窗安全協(xié)議書
- 體外診斷試劑-C反應(yīng)蛋白(CRP)測定試劑盒(膠乳增強(qiáng)免疫比濁法)臨床評(píng)價(jià)報(bào)告-血清
- 八年級(jí)物理上冊(滬粵版2024)新教材解讀課件
- 人教版數(shù)學(xué)四上《大數(shù)的認(rèn)識(shí)》說課稿
- 氣胸講課課件
- 2024年典型事故案例警示教育手冊15例
- 沖突影響和高風(fēng)險(xiǎn)區(qū)域礦產(chǎn)負(fù)責(zé)任供應(yīng)鏈的盡職調(diào)查指南
- 《植物營養(yǎng)學(xué)》課件
評(píng)論
0/150
提交評(píng)論