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