freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

面向對象程序設計c語言四ppt(已修改)

2025-02-01 12:55 本頁面
 

【正文】 李愛華 程磊 編著 清華大學出版社 同名教材 配套電子教案 2022年 2月 面向對象程序設計( C++語言) 4 2 第二部分 面向對象的程序設計 第 3章 類和對象 (一 ) 第 4章 類和對象 (二 ) 第 5章 繼承和派生 第 6章 虛函數與多態(tài)性 第 7章 運算符重載 第 8章 模板 第 9章 標準模板庫 STL 第 10章 C++語言的輸入和輸出 3 第 8章 模板 本章重點: ? 模板的概念 ? 函數模板與模板函數 ? 類模板與模板類 4 ? 模板 是 C++最重要的特性之一 , 使用模版可以設計出與數據類型無關的程序框架 , 可以建立具有通用類型的類庫和函數庫 。 ? 模板是 C++軟件重用機制的又一完美體現 , 引出了參數化多態(tài)性的概念 , 即把程序所處理的對象的類型參數化 , 使得一段程序可以用于多種不同類型的對象 。 5 模板的概念 ? 前面已經學過函數的重載 , 對于 int型和 float型數據 , 必須定義兩個單獨的函數 Max( ), 才能實現對兩個數求最大值的功能 。 如下程序所示的函數 Max,, 實現兩個函數的主要操作都是一樣的 , 唯一的差別是:一個函數處理 int 型數據 , 另一個函數處理 float 型數據 。 int Max( int a, int b) //求兩個 int數最大值 { return ab?a:b。 } float Max( float a, float b) //求兩個 float數最大值 { return ab?a:b。 } ? 可以看出 , 求任何類型兩個數的最大值 , 都有下列函數定義形式: T Max( T a, T b) //求兩個 T類型數最大值 { return ab?a:b。 } 6 ? 這種 Max重載函數的統(tǒng)一特征是參數類型不同 , 函數體操作卻完全相同 。 考慮這樣兩個問題: ? 第一 , 能否避免函數重載時的重復工作 ? ? 第二 , 這些重載函數對新的數據類型是否支持 ? ? 要解決這兩個問題 , C++中的模板就可以做到 。 ? 有了模板 , 重復的函數重載工作可以省略; ? 良好的模板再結合運算符重載等其他機制 , 也能夠適用于各種新定義的數據類型 。 7 函數模板與模板函數 ? 函數模板是函數的一種抽象形式 。 函數模板的定義形式為: template class T1,class T2,... 返回類型 函數模板名 ( 數據參教表 ) { 函數模板的函數體 } 8 ? 前面的 Max函數因此可以寫成如下形式 : template typename T T Max( T a, T b) //求兩個 T類型數最大值 { return ab?a:b。 } 9 ? 模板并不是函數 , 它是以具體的類型為實參來生成函數體的一種程序框架 , C++在編譯函數模板時 , 不會產生任何執(zhí)行代碼 。 ? 只有在用函數模板來定義具體函數時 , 才會生成執(zhí)行代碼 , 而使用函數模板則只需以函數模板名為函數名進行函數調用即可 。 10 【例 】編寫求最大和求絕對值兩個函數模板。 /* */ includeiostream using namespace std。 template typename T T Max( T a, T b) //求兩個 T類型數最大值 { return ab?a:b。 } template typename T T Abs( T a) //求 T類型數的絕對值 { return a=0?a:a。 } 11 int main( ) { int ia=5,ib=11,ic。 float fa=,fb=,fc。 ic=Max(ia,ib)。 cout”Max(ia,ib)=”icendl 。 ic=Abs(ia) 。 cout”Abs(ia)=”icendl 。 fc=Max(fa,fb)。 cout”Max(fa,fb)=”fcendl 。 fc=Abs(fa) 。 cout”Abs(fa)=”fcendl 。 return 0。 } 12 Max(ia,ib)=11 Abs(ia)=5 Max(fa,fb)= Abs(fa)= 程序的運行結果為: 13 ? C++的編譯器在掃描到 Max(ia,ib)時 ,因為是第一次發(fā)現 Max函數調用 ,而 ia,ib是整型 , 因此確定函數模板中的抽象類型 T為 int,所以內部生成如下的模板函數: template int int Max( int a, int b) { return ab?a:b。 } ? 而把此參數類型具體化產生新的模板函數的過程稱為 函數模板實例化 。 14 【例 】重載模板函數。 /* */ include include template typename T T Max( T a, T b) //求兩個 T類型數最大值 { return ab?a:b。 } char *Max(char *pa,char *pb) { return strcmp(pa,pb)0?pa:pb。 } void main() { coutMax(10,20)endl。 coutMax(Hello,Fellow)endl。 } 15 20 Hello 程序的運行結果為: 16 【例 】模板函數與 Student類的結合。 /* */ include //使用該頭文件 , 因為本程序將進行運算符重載 include template typename T Tamp。 Max(T amp。a, T amp。b) //使用引用類型來傳遞對象 { return ab?a:b。 } class Student { int number。 char name[20]。 17 public: Student(int i,char *s) //構造學生對象 { number=i。 strcpy(name,s)。 } bool operator(Student amp。st) //重載運算符 “ ” { return number。 //返回成員 number的比較結果 } void Print() //輸出結果 { cout”Number:”numberendl。 cout”Name:”nameendl。 } }。 int main() { Student st1(12,”Li”),st2(13,”Zhang”),st3(0,””)。 st3=Max(st1,st2)。 ()。 return 0。 } 18 Number:13 Name:Zhang 程序的運行結果為: 19 類模板與模板類 ? 類模板 就是設計一種類的框架 , 可以適用于不同的數據類型 , 是類的抽象 。 ? 利用類模板可以針對不同的數據類型定義出具有共性的一組類 。 ? 與函數模板相似 , 通過使用類模板可使得所定義的類中的某些數據成員 、 某些成員函數的參數 、 某些成員函數的返回值都可以是任意類型的 ( 包括基本類型和用戶自定義類型 ) 。 ? 也可以這樣說 , 通過類模板可將程序所處理對象 ( 數據 )的類型參數化 , 從而使得同一段程序可用于處理多種不同類型的對象 ( 數據 ) , 提高了程序的抽象層次與可重用性 。 20 ? 定義類模板的一般格式為: template 類型形參列表 class 類模板名 { 類模板體定義 }。 ? 其中類型形參列表與函數模板形式相同 , 如typename T1, typename T2,…… . 21 【例 】定義類模板 SafeArray, 用來表述安全數組的概念。 /* */ includeiostream using namespace std。 templatetypename T,int size class SafeArray //定義類模板 { private: T ary[size]。 //數組 ary大小由模板參數 size決定 public: SafeArray () //構造函數 { for(int i=0。isize。i++) ary[i]=0。 //初值設為 0, 對基本數據類型有效 } 22 T amp。 operator[](int i) //重載運算符 [] { if(i0||i=size) //進行下標的安全檢查 , 超出范圍就退出程序 { cout”Index out of bound!”endl。 exit(0)。 } return ary[i]。 } void Print() //輸出數組元素 { for(int i=0。isize。i++) coutary[i] 。 coutendl。 } }。 23 ? 類模板的成員函數可以放在類模板的定義體中 ,與普通成員函數定義方法一樣 , 也可以放在類模板的外部定義 , 類模板的成員函數其實都是函數模板 , 其定義形式如下: template 類型形參列表 函數返回類型 類模板名 類型名表 ::函數名 (形參表 ) { 函數體 } 24 ? 類模板本身不是具體的類 , 其中涉及的數據類型都是抽象的類型 , 要想使用類模板 , 必需先用實際的類型來取代抽象的類型 , 此過程將確定類模板的實例 , 即 模板類 , 然后再用該類定義對象 , 其格式如下: 類模板名 類型實參表列 對象名; 25 【例 】重新定義類模板 SafeArray, 并進行測試。 /* */ includeiostream using namespace std。 templatetypename T,int size class SafeArray //定義類模板 { private: T ary[size]。 //數組 ary大小有模板參數 size決定 public: SafeArray ()。 //構造函數 T amp。 operator[](int i)。 //重載運算符 [] void Print()。 //輸出數組元素 }。 template typename T,int size SafeArrayT,size::SafeArray () //構造函數 { for(int i=0。isize。i++) ary[i]=0。 //初值設為 0, 對基本數據類型有效 } 26 template typename T,int size Tamp。 SafeArrayT,size::operator[](int i) //重載運算符 [] { if(i0||i=size) //進行下標的安全檢查 , 超出范圍就退出程序 { cout”Index out of bound”endl。 exit(0)。 } return ary[i]。 } template typename T,int size void SafeArrayT,size:: Print() //輸出數組元素 { for(int i=0。isize。i++) coutary[i] 。 coutendl。 } 27 int main() { SafeArrayint,5 ais。 SafeArrayfloat,4 afs。 ais[2]=10。 //修改了對象 ais的第 2個元素 afs[3]=。 //修改了對象 afs的第 3個元素 ()。 ()。 return 0。 } 28 0 0 0 0 0 10 0 0 程序的運行結果為: 29 【例 】定義堆棧類模板 Stack, 實現堆?;静僮?,并測試。 /* */ includeiostream using namespace std。 templatetypename T class Stack {
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1