《模板及其應》PPT課件.ppt_第1頁
《模板及其應》PPT課件.ppt_第2頁
《模板及其應》PPT課件.ppt_第3頁
《模板及其應》PPT課件.ppt_第4頁
《模板及其應》PPT課件.ppt_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

VIP免費下載

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第十三講 模板及其應用,13.1 函數模板 13.2 類模板 13.3 類模板應用,13.1 函數模板 13.2 類模板 13.3 類模板應用,1.函數模板的概念,通常設計的算法(處理語句)是可以處理多種數據類型的,但目前處理相同的問題,仍要分別定義多個類似的函數。,13.1 函數模板 13.2 類模板 13.3 類模板應用,int max (int a, int b) /求兩個整數中較大值 if(ab) return a; else return b; double max (double a, double b) /求兩個浮點數中較大值 if(ab) return a; else return b; char max (char a, char b) . /求兩個字符中較大值 ,例1.求兩個數據中較大值(P.300),13.1 函數模板 13.2 類模板 13.3 類模板應用,如果“提取”出一個可變化的類型參數T,就可以“綜合”成同一個函數(模板),它實際上代表著一組函數:,T max (T a, T b) if(ab) return a; else return b; ,13.1 函數模板 13.2 類模板 13.3 類模板應用,在C+中定義完整的函數模板max時,格式如下:,template T max (T a, T b) if(ab) return a; else return b; ,13.1 函數模板 13.2 類模板 13.3 類模板應用,2.函數模板的說明,template ,template: 關鍵字,指明為函數模板或類模板。,模板參數表:用尖括號“”括起來,一個或多個模板參數,用逗號“,”分開。,模板參數:class。參數名是標識符,其對應實參可以是系統(tǒng)預定義類型或用戶自定義類型。,13.1 函數模板 13.2 類模板 13.3 類模板應用,函數定義:和一般函數定義相同。 () ,13.1 函數模板 13.2 類模板 13.3 類模板應用,注意:,1) 應在“返回類型”或“形參表”或“函 數體”中使用上述的“類型形參 名” 。 2) 調用處則類似于一般函數,用戶 只需給出具體的實參。 3) 模板函數調用時,不進行實參到 形參類型的自動轉換。,13.1 函數模板 13.2 類模板 13.3 類模板應用,例2:函數模板實例一 Program 9-1.cpp (P.302),例3:函數模板實例二 Program 9-2.cpp (P.303),例4:函數模板實例三 Program 9-3.cpp (P.303-304),13.1 函數模板 13.2 類模板 13.3 類模板應用,利用類模板(帶類型參數或普通參數的類),一次就可定義出具有共性的一組類。 即,可使得所定義類中的某些數據成員、某些成員函數的參數、某些成員函數的返回值都可以是任意類型的。,13.1 函數模板 13.2 類模板 13.3 類模板應用,1.類模板定義格式,template class 類模板定義體 ,template:關鍵字,指明本說明為類模板說明。,模板參數表:用尖括號“”括起來的若干個類型形參或者普通形參。說明類型形參時,使用“class ”的方式。說明普通形參時,使用“”的方式。,13.1 函數模板 13.2 類模板 13.3 類模板應用,class:關鍵字,指明定義的是類模板。,類模板名:用戶自定義標識符。,類模板定義體:實際上是類定義體,以類模板參數作為某個類或某個類型名來使用。,13.1 函數模板 13.2 類模板 13.3 類模板應用,注意:,2) 利用類模板說明類對象時,要隨類模板名同時給出對應于類型形參或普通形參的具體實參(從而實例化為一個具體的類)。說明格式為: 類模板名 類型形參的相應實參為類型名,而普通形參的相應實參必須為常量。,1) 類定義體中應使用上述的“類型形參名”及“普通形參名”。,13.1 函數模板 13.2 類模板 13.3 類模板應用,3) 類模板的成員函數既可以在類體內進行說明(自動按內聯(lián)函數處理),也可以在類體外進行說明。 在類體外說明(定義)時使用如下格式: template 返回類型 類模板名 :函數名( 形參表 ) 函數體 ;,上述的“形參1的名字”來自于“形參1的說明”,由“甩掉”說明部分的“類型”而得,是對類型形參或普通形參的使用。而 “類模板名 :”所起的作用正是在類體外定義成員函數時在函數名前所加的類限定符!,13.1 函數模板 13.2 類模板 13.3 類模板應用,例5,對具有一個類型參數T的類模板TestClass,在類體外定義其成員函數getData時的大致樣式如下: template T TestClass: getData( 形參表 ) . /函數體 ;,其中的“TestClass:”所起的作用正是在類體外定義成員函數時在函數名前所加的類限定符!,13.1 函數模板 13.2 類模板 13.3 類模板應用,2.僅使用類型參數的類模板示例,例6: #include template class TestClass public: T buffer10; /T類型的數據成員buffer數組大小固定為10 (靈活性差!) T getData(int j); /獲取T類型buffer(數組)的第j個分量 ; template T TestClass:getData(int j) return *(buffer+j); ;,13.1 函數模板 13.2 類模板 13.3 類模板應用,void main() TestClass ClassInstA; /char取代T,從而實例化為一個具體的類 char cArr6=“abcde“; for(int i=0; i5; i+) ClassInstA.bufferi=cArri; for(i=0; i5; i+) char res=ClassInstA.getData(i); coutres“ “; coutendl;,13.1 函數模板 13.2 類模板 13.3 類模板應用,void main() TestClass ClassInstF; /實例化為另外一個具體的類 double fArr6=12.1, 23.2, 34.3, 45.4, 56.5, 67.6; for(i=0; i6; i+) ClassInstF.bufferi=fArri-10; for(i=0; i6; i+) double res=ClassInstF.getData(i); coutres“ “; coutendl; ,13.1 函數模板 13.2 類模板 13.3 類模板應用,程序執(zhí)行后的顯示結果如下: a b c d e 2.1 13.2 24.3 35.4 46.5 57.6,13.1 函數模板 13.2 類模板 13.3 類模板應用,3.僅使用普通參數(非類型參數)的類模板示例,例7: #include template class TestClass public: int bufferi; /使buffer的大小可變化,但其類型則固定為int(靈活性差!) int getData(int j); ; template int TestClass:getData(int j) return *(buffer+j); ;,13.1 函數模板 13.2 類模板 13.3 類模板應用,void main() TestClass ClassInstF; double fArr6=12.1, 23.2, 34.3, 45.4, 56.5, 67.6; for(i=0; i6; i+) ClassInstF.bufferi=fArri-10; for(i=0; i6; i+) double res=ClassInstF.getData(i); coutres“ “; coutendl; ,13.1 函數模板 13.2 類模板 13.3 類模板應用,程序執(zhí)行后的顯示結果如下: 2 13 24 35 46 57,13.1 函數模板 13.2 類模板 13.3 類模板應用,4.同時使用類型參數和普通參數的類模板示例,例8: #include #include “string.h“ template class TestClass public: T bufferi; /T類型的buffer,其大小隨普通形參i的值變化(靈活性大!) T getData(int j); ; template T TestClass:getData(int j) return *(buffer+j); ;,13.1 函數模板 13.2 類模板 13.3 類模板應用,void main() TestClass ClassInstA; char cArr6=“abcde“; strcpy(ClassInstA.buffer, cArr); for(int i=0; i5; i+) char res=ClassInstA.getData(i); coutres“ “; coutendl;,13.1 函數模板 13.2 類模板 13.3 類模板應用,TestClass ClassInstF; double fArr6=12.1, 23.2, 34.3, 45.4, 56.5, 67.6; for(i=0; i6; i+) ClassInstF.bufferi=fArri-10; for(i=0; i6; i+) double res=ClassInstF.getData(i); coutres“ “; coutendl; ,程序執(zhí)行后的顯示結果如下: a b c d e 2.1 13.2 24.3 35.4 46.5 57.6,13.1 函數模板 13.2 類模板 13.3 類模板應用,1.設計一個鏈表類模板,定義一個處理鏈表的類模板list,它含有一個類型形參T,以指出每一鏈表項的data數據域的類型。,例9: Program9-8.cpp (P.318),#include #include template class list struct node T data; node * next; *head, *tail;,13.1 函數模板 13.2 類模板 13.3 類模板應用,/* 數據成員head與tail均為指針。其中的head總指向鏈表的首項,而tail總指向鏈表的尾項。每當準備往鏈表中加入一個表項(及其表項data數據)時,程序中首先使用“new node”來動態(tài)生成一個新的表項空間,并“填入”該表項的data數據,而后通過指針的改變與關聯(lián),將該表項加入到以head為首以tail為尾的當前鏈表結構中(以形成一個更新后的鏈表)。 */,13.1 函數模板 13.2 類模板 13.3 類模板應用,public: list() /構造函數,創(chuàng)建一個“空鏈表” head=tail=NULL; ; void Insert (T * item) /*動態(tài)生成鏈表項空間,并將item所指向的T型數據放至該項的data;而后將新生成的該鏈表項插入到原鏈的鏈首(鏈表的“?!笔接梅ǎ?。*/ . ;,13.1 函數模板 13.2 類模板 13.3 類模板應用,void Append (T * item) /*動態(tài)生成鏈表項空間,并將item所指向的T型數據放入該項的data; 而后將新生成的該項附加到原鏈的鏈尾(鏈表的“隊列”式用法)。 */ . ; T get () /*取出鏈表首項的數據(data域值),并將該首項從鏈表中刪去 */ . ; ; /類模板list定義結束,13.1 函數模板 13.2 類模板 13.3 類模板應用,class person public: char name20; int age; float hight; ; /* 注:若說明為“char* name;”,則主函數處要通過new為每一對象的name域申請動態(tài)空間! */ void main() person ps; list link1; list link2;,13.1 函數模板 13.2 類模板 13.3 類模板應用,cout 0 - 1 - 2 - 3 - 4 link2鏈表: head - 4號人員信息 - 3號人員信息 - 2號人員信息 - 1號人員信息 - 0號人員信息 */,13.1 函數模板 13.2 類模板 13.3 類模板應用,cout“ - The result -“endl; for (i=0;i5;i+) ps=link2.get(); /取出link2鏈表首項的人員信息 link2.Append( /輸出link2鏈表人員信息的name, /以及l(fā)ink1鏈表表項中的對象的順序號 ,13.1 函數模板 13.2 類模板 13.3 類模板應用,cout“ - The result -“endl; for (i=0;i5;i+) ps=link2.get(); /取出link2鏈表首項的人員信息 link2.Append( /*輸出link2鏈表人員信息的name以及l(fā)ink1鏈表表項中的對象的順序號 ,13.1 函數模板 13.2 類模板 13.3 類模板應用,程序執(zhí)行后的顯示結果如下: - Input 5 persons information - input 0 inf(name,age,hight):zhangLi 20 1.68 input 1 inf(name,age,hight):wangyue 21 1.72 input 2 inf(name,age,hight):liming 19 1.75 input 3 inf(name,age,hight):zhaoyi 19 1.78 input 4 inf(name,age,hight):chenjin 20 1.8 - The result - chenjin 0 zhaoyi 1 liming 2 wangyue 3 zhangLi 4,13.1 函數模板 13.2 類模板 13.3 類模板應用,2.按不同方法派生出的類模板(P.314),可使用不同方法來派生類模板。例如常用如下幾種方式:,(1) 一般類(其中不使用類型參數的類)作基類。,(2) 類模板作基類(但僅基類中用到類型參數T)。,(3)類模板作基類(但基類與派生類中均用到同一個類型參數T),(4) 類模板作基類(基類中用到類型參數T2,派生類中用到類型參數T1),13.1 函數模板 13.2 類模板 13.3 類模板應用,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論