|
我們可以定義一個(gè)數(shù)組模板,并且利用該模板聲明其數(shù)組成員。聲明的方式非常簡(jiǎn)單,主需要一下兩步:
第一句話(huà)就是定義這個(gè)模板,注意其中的參數(shù)不再是1個(gè)了,而是2個(gè)。其中第一個(gè)參數(shù)就是一個(gè)模板的類(lèi)型ElementType,表示數(shù)組a的類(lèi)型;另外一個(gè)是整型變量n,眾所周知,它代表的是該數(shù)組a的長(zhǎng)度。下面,我用一個(gè)比較難的程序來(lái)說(shuō)明一下數(shù)組模板的作用。
程序分析: 首先我們?cè)诔绦虻牡?行定義了一個(gè)數(shù)組模板,其類(lèi)型為ElementType,數(shù)組長(zhǎng)度為n。然后我們?cè)陬?lèi)ArrayTemplate中于第7行聲明了一 個(gè)不帶參數(shù)的構(gòu)造函數(shù),定義在第15行;再在第8行重新聲明了一個(gè)帶一個(gè)參數(shù)的構(gòu)造函數(shù),定義在第行。在程序的第9行我們重載了[]運(yùn)算符。這里注意一 下,我們?cè)谀0孱?lèi)的外面定義類(lèi)中的函數(shù)的時(shí)候,應(yīng)該有三點(diǎn)注意事項(xiàng):
下面,我們從主函數(shù)開(kāi)始進(jìn)行分析... 首先在第54行我們調(diào)用模板類(lèi)創(chuàng)建了一個(gè)array_1的類(lèi)型。它其中的變量為int型,然后數(shù)組元素一共有4個(gè)。這樣一來(lái),就表示在模板類(lèi)ArrayTemplate中的的私有成員變量
實(shí)際上就成為了以下的形式:
這樣一來(lái),在程序第55行調(diào)用show()函數(shù)的時(shí)候,for循環(huán)的次數(shù)就會(huì)限定為4次(因?yàn)閚=4),這樣就會(huì)輸出由模板類(lèi)對(duì)象 array_1創(chuàng)建的4個(gè)數(shù)組a[0]、a[1]、a[2]、a[3]的值。然后我們?cè)賮?lái)看看程序的第56行,這里在堆中創(chuàng)建了4個(gè)對(duì)象,并把這4個(gè)對(duì)象 放在一個(gè)數(shù)組中,這個(gè)數(shù)組就是array_2。由于這個(gè)數(shù)組中間存放的全部都是對(duì)象,那么我們就把a(bǔ)rray_2叫做對(duì)象數(shù)組。后面的for循環(huán)中我們首 先來(lái)看看程序第59行的語(yǔ)句:
當(dāng)i=0的時(shí)候這句話(huà)就相當(dāng)于
注意右邊的array_1[0],因?yàn)閍rray_1是一個(gè)對(duì)象而不是一個(gè)數(shù)組,那么編譯器就會(huì)調(diào)用我們自己在程序的第33行定義的重載[]運(yùn) 算符的函數(shù)。它返回的就是array_1中的數(shù)組a[i]的值。在這里,因?yàn)閕=0,所以返回值就是a[0]。而我們從上面可以看到,a[0]=1所以相 當(dāng)于返回1。而特別注意的是array_2[0]的類(lèi)型為ArrayTemplate類(lèi)型,而a[0]的類(lèi)型卻是整型,編譯器則會(huì)使用隱式類(lèi)型轉(zhuǎn)換:
將a[0]強(qiáng)制轉(zhuǎn)換為ArrayTemplate類(lèi)型。這樣就會(huì)調(diào)用位于程序第24定義的帶一個(gè)參數(shù)的構(gòu)造函數(shù)。在這個(gè)構(gòu)造函數(shù)中,我們將 a[0]的值作為t值傳遞進(jìn)去,然后再for循環(huán)中將a[0]到a[3]的值全部賦值為t(即a[0],也就是1)。值得注意的一點(diǎn)就在于,這里t代表的 a[0]是array_1的數(shù)組,而4次循環(huán)中的a[i]代表的是array_2對(duì)象數(shù)組中array_2[0]中的a[0]到a[3]的值!!所以會(huì)輸 出1,1,1,1也就不足為奇了。同理,后面的輸出分析方法同前面一樣。只有一點(diǎn),當(dāng)主程序的for循環(huán),循環(huán)到i=4的時(shí)候。這時(shí),就會(huì)執(zhí)行 operator[]函數(shù)中的if語(yǔ)句之后的內(nèi)容,退出程序。 整個(gè)程序的輸出證明了我們的理論:
OK,這個(gè)比較難的程序搞定了,也就標(biāo)志了這個(gè)方面的模板應(yīng)用學(xué)習(xí)完了,^_^,繼續(xù)努力! |
|
|