




已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第13章 泛型機(jī)制模板,類模板的定義 類模板的實(shí)例化 模板的編譯 非類型形參和參數(shù)的默認(rèn)值 類模板的友元 類模板作為基類,類模板的定義,類模板允許用戶為類定義一種模式,使得類中的某些數(shù)據(jù)成員、某些成員函數(shù)的參數(shù)或返回值能取任意數(shù)據(jù)類型。 定義格式: template class 標(biāo)識符 class 類名/;,類模板實(shí)例,定義一個泛型的、可指定下標(biāo)范圍的、安全的數(shù)組,類模板定義,template class Array int low; int high; T *storage; public: Array(int lh = 0, int rh = 0): low(lh), high(rh) storage = new T high - low + 1; Array(const Array ,類模板的成員函數(shù)的定義,類模板的成員函數(shù)都是函數(shù)模板,模板參數(shù)與類模板相同 形式: Template 返回類型 類模板名:成員函數(shù)名(函數(shù)的形參表) 函數(shù)體 Array類的成員函數(shù)的格式 template 返回類型 Array:函數(shù)名(形式參數(shù)表) 函數(shù)體,Array的成員函數(shù)的實(shí)現(xiàn),template Array ,template Array:Array(const Array ,第13章 泛型機(jī)制模板,類模板的定義 類模板的實(shí)例化 模板的編譯 非類型形參和參數(shù)的默認(rèn)值 類模板的友元 類模板作為基類,類模板的實(shí)例化,編譯器從模板生成一個特定的類或函數(shù)的過程稱為模板的實(shí)例化。 類模板實(shí)例化后形成一個模板類。 類模板的實(shí)例化格式如下: 類模板名 對象名; 如: Array array1(20,30); Array array2(10, 20);,模板類的對象的使用,我們可以用下列語句輸入array2的值: for (i=10; i=20; +i) array2i = 0.1 * i; 也可以用下列語句輸出array1的值: for (i=20; i=30; +i) cout array1i t;,第13章 泛型機(jī)制模板,類模板的定義 類模板的實(shí)例化 模板的編譯 非類型形參和參數(shù)的默認(rèn)值 類模板的友元 類模板作為基類,模板的編譯,編譯模板時,編譯器進(jìn)行三個階段的檢查 第一階段是編譯模板定義本身。這個階段編譯器只是檢查一些諸如漏掉分號、變量名拼寫錯誤之類的語法錯誤。 第二階段是編譯器看到模板使用時。對于函數(shù)模板,檢查實(shí)際參數(shù)的數(shù)目和類型是否恰當(dāng)。對于類模板可以檢測出提供的模板的實(shí)際參數(shù)的數(shù)目是否正確。 第三階段是實(shí)例化。編譯器徹底編譯模板。 所以,調(diào)試包含類模板的程序時,必須在定義了類模板的對象并且對對象調(diào)用了所有的成員函數(shù)后,才能說明類模板的語法是正確的。,第13章 泛型機(jī)制模板,類模板的定義 類模板的實(shí)例化 模板的編譯 非類型形參和參數(shù)的默認(rèn)值 類模板的友元 類模板作為基類,非類型形參,模板的形式參數(shù)不一定都是類型,也可以是非類型的參數(shù)。 在模板實(shí)例化時,類型參數(shù)用一個系統(tǒng)內(nèi)置類型的名字或一個用戶已定義類的名字作為實(shí)際參數(shù),而非類型參數(shù)將用一個值作為實(shí)際參數(shù)。非類型的模板實(shí)參的值必須是編譯時的常量。,非類型形參實(shí)例,定義了一個安全的、可指定下標(biāo)范圍的、且下標(biāo)范圍必須是編譯時的常量的類模板Array。(相當(dāng)于C+中的普通數(shù)組),設(shè)計考慮,在定義類模板時,數(shù)組的大小是不知道的,但在編譯時必須給出。 這可以通過非類型參數(shù)實(shí)現(xiàn):該類模板有三個模板參數(shù):數(shù)組元素的類型、數(shù)組下標(biāo)的上下界。前者為類型參數(shù),后者為非類型參數(shù)。,類定義,template class Array T storagehigh - low + 1; public: T ,類模板的使用,定義一個下標(biāo)范圍為10到20的整型數(shù)組,可用下列語句: Array array;,參數(shù)的默認(rèn)值,模板參數(shù)和普通的函數(shù)參數(shù)一樣,也可以指定默認(rèn)值。如果前例中的類模板Array經(jīng)常被實(shí)例化為整型數(shù)組,則可在類模板定義時指定缺省值: template class Array ; 當(dāng)要定義整型數(shù)組array時,就可以不指定模板的實(shí)參: Array array;,第13章 泛型機(jī)制模板,類模板的定義 類模板的實(shí)例化 模板的編譯 非類型形參和參數(shù)的默認(rèn)值 類模板的友元 類模板作為基類,類模板的友元,類模板可以聲明兩種友元: 聲明普通的類或全局函數(shù)為所定義的類模板的友元 聲明某個類模板或函數(shù)模板的實(shí)例是所定義類模板的友元,普通友元,定義普通類或全局函數(shù)為所定義類模板的友元的聲明格式如下所示: template class A friend class B; friend void f(); ; 該定義聲明了類B和全局函數(shù)f是類模板A的友元。B的所有的成員函數(shù)和全局函數(shù)f可以訪問類模板A的所有實(shí)例的私有成員。,特定實(shí)例的友元,定義一: template friend class B; /類模板聲明 template friend void f(const T 將類模板B的一個實(shí)例,即模板參數(shù)為int時的那個實(shí)例作為類模板A的所有實(shí)例的友元。將函數(shù)模板f對應(yīng)于模板參數(shù)為int的實(shí)例作為類模板A所有實(shí)例的友元。,特定實(shí)例的友元,定義二 template friend class B; template friend void f(const T 這些友元定義說明了類模板A的特定實(shí)例與使用同一模板實(shí)參的類模板B和函數(shù)模板f的實(shí)例是友元。,類模板的友元實(shí)例,為類模板Array增加一個輸出運(yùn)算符重載函數(shù),可以直接輸出數(shù)組的所有元素。如有定義 Array array(10,20); 如程序中為該數(shù)組元素賦的值是10到20。即,將10賦給array10,11賦給array11,??梢灾苯佑胏out array;輸出這11個元素的值。,實(shí)現(xiàn)考慮,要直接輸出數(shù)組的所有元素,可以為類模板Array重載“”運(yùn)算符。 由于Array是一個類模板,可用于不同類型的數(shù)組,因此,該輸出運(yùn)算符重載函數(shù)也應(yīng)該是函數(shù)模板。 當(dāng)array和operator取相同實(shí)參時,array的實(shí)例將operator的實(shí)例作為友元,重載函數(shù)模板的實(shí)現(xiàn),template ostream ,增加了輸出重載的類模板Array,template class Array; /類模板Array的聲明 template ostream public: 。 ,類模板的友元實(shí)例,定義一個單鏈表,可以存放任意類型的數(shù)據(jù)。將單鏈表的所有操作都封裝在單鏈表類中,使得單鏈表的用戶只需要知道單鏈表可以做那些操作,而不用去管這些操作是如何實(shí)現(xiàn)的。,實(shí)現(xiàn)考慮,單鏈表中的每個元素存放在一個單獨(dú)的節(jié)點(diǎn)中 存儲一個單鏈表就是存儲一個指向單鏈表頭節(jié)點(diǎn)的指針。 單鏈表的實(shí)現(xiàn)必須有兩個類: 節(jié)點(diǎn)類 單鏈表類 由于我們要求的單鏈表是可以處理任何類型,因此這兩個類都是模板。,類模板node的定義,template class linkList; template ostream ,linkList的定義,template class linkList friend ostream ,類模板linkList成員函數(shù)的實(shí)現(xiàn),template void linkList:makeEmpty() node *p = head-next, *q; head-next=NULL; while (p != NULL) q=p-next; delete p; p=q; ,template void linkList:create(const elemType ,linkList類模板中的輸出運(yùn)算符重載函數(shù)的實(shí)現(xiàn),template ostream ,鏈表類的使用,定義: linkList intList; 該定義產(chǎn)生了類模板的一個整型實(shí)例 如果想創(chuàng)建這個單鏈表,可以調(diào)用create函數(shù): intList.create(0); 該調(diào)用將輸入鏈表中的元素值,直到輸入0為止。 要輸出鏈表的所有元素,可以直接輸出: cout intList;,鏈表類的另一種實(shí)現(xiàn),由于結(jié)點(diǎn)類只有鏈表類要用,因此可以將結(jié)點(diǎn)類作為鏈表類的內(nèi)嵌類。 這樣既可以保證結(jié)點(diǎn)類對于鏈表類的私有性,訪問也更加方便。,第13章 泛型機(jī)制模板,類模板的定義 類模板的實(shí)例化 模板的編譯 非類型形參和參數(shù)的默認(rèn)值 類模板的友元 類模板作為基類,類模板作為基類,類模板可以作為繼承關(guān)系中的基類。自然,從該基類派生出來的派生類還是一個類模板,而且是一個功能更強(qiáng)的類模板。 類模板的繼承和普通的繼承方法基本類似。只是在涉及到基類時,都必須帶上模板參數(shù)。,類模板繼承實(shí)例,從linkList類模板派生一個棧的類模板 棧是一類特殊的線性表,它的插入和刪除都只能在表的一段進(jìn)行。允許插入和刪除的一端稱為棧頂,另一端稱為棧底。棧的常用操作有進(jìn)棧(push)和出棧(pop)。 由于棧是一個特殊的線性表,因此可以將棧建立在表的基礎(chǔ)上。在單鏈表中,我們可以將表頭定義為棧頂,表尾定義為棧底。因此,棧就是在單鏈表的基礎(chǔ)上增加兩個操作:push和pop。,棧的類模板的定義,template class stack : public linkList public: void push(const elemType ,類模板stack的使用,定義一個整型棧:stack st; 進(jìn)棧: for (int i = 1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 以創(chuàng)新驅(qū)動未來教育進(jìn)步探討AR技術(shù)的應(yīng)用價值與前景展望
- 在線教育平臺的運(yùn)營模式與倫理規(guī)范
- 教育心理學(xué)的力量激發(fā)學(xué)生潛能的技巧
- 增強(qiáng)教師情緒智力促進(jìn)學(xué)生全面發(fā)展
- 商業(yè)模式創(chuàng)新在教育領(lǐng)域的應(yīng)用實(shí)踐
- 技術(shù)融合背景下的教育行業(yè)薪酬變革
- 2024湖南外貿(mào)職業(yè)學(xué)院單招《職業(yè)適應(yīng)性測試》考前沖刺練習(xí)題含答案詳解【培優(yōu)A卷】
- 第13章 軸對稱-學(xué)易試題君之單元測試君2025-2026學(xué)年八年級數(shù)學(xué)人教版(上)(考試版)
- 遼寧省2025年上半年安全工程師安全生產(chǎn):平刨的安全防護(hù)裝置有哪些考試題
- 河南省2025年度維修電工高級理論知識試卷1111及答案(職業(yè)技能鑒定國家題庫)
- 2025年高考語文全國一卷試題真題及答案詳解(精校打?。?/a>
- 山西焦煤集團(tuán)筆試題
- 星期音樂會智慧樹知到期末考試答案章節(jié)答案2024年同濟(jì)大學(xué)
- 土木工程學(xué)院社會評機(jī)制及實(shí)施辦法
- 高填方、高邊坡及軟基路基監(jiān)測方案
- 002TD-SCDMA 無線網(wǎng)絡(luò)關(guān)鍵技術(shù)
- 精品灌溉引水工程施工組織設(shè)計
- 救護(hù)車注冊登記審批表
- 口腔頜面部手術(shù)的麻醉PPT學(xué)習(xí)教案
- 平衡與協(xié)調(diào)訓(xùn)練PPT課件
- 年普通高校(中專招生考生體格檢查表
評論
0/150
提交評論