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

正文內(nèi)容

c應(yīng)用與開發(fā)案例教程(下)ppt-資料下載頁

2024-10-17 00:24本頁面
  

【正文】 o.++i:(*TempPerson)endl。 delete TempPerson。 } } } //源程序結(jié)束 《 C++教程 》 清華大學(xué)出版社 第 9章 模板 《 C++教程 》 清華大學(xué)出版社 大多數(shù)人或多或少都看過或聽說過印刷的過程。不管是印在布上還是在報(bào)紙上,通常要用到一個(gè)樣本。印刷的一種方法是為每一頁紙或每一米布一遍遍地重復(fù)制作樣本。另一種更常見也是更廣泛使用的方法是使用印版或模子。創(chuàng)建一個(gè)這種樣本的模子或模板,用墨水或顏料對它染色,然后把這個(gè)樣本印到所需要的媒質(zhì)上。因此,做一個(gè)模子可以避免重復(fù)制作樣本的麻煩。這個(gè)模子可以用來印刷任意多次。在 C++中,模板就相當(dāng)于這里說的模子。 模板的實(shí)質(zhì)是函數(shù)和類根據(jù)要求在運(yùn)行時(shí)的實(shí)例化。這意味著程序員在編寫代碼時(shí)不必了解確切的應(yīng)用環(huán)境。類的最終用戶能夠在執(zhí)行的時(shí)候創(chuàng)建自定義的類。模板的概念可以應(yīng)用于函數(shù)和類。 模板是 C++支持參數(shù)化多態(tài)的工具,使用模板可以使用戶或者函數(shù)聲明一種一般模式,使得類中的某些數(shù)據(jù)成員或者 《 C++教程 》 清華大學(xué)出版社 成員函數(shù)的參數(shù) 、 返回值取得任意類型 。 《 C++教程 》 清華大學(xué)出版社 函數(shù)模板和模板函數(shù) 在 C++中,當(dāng)一個(gè)函數(shù)被重載時(shí)必須創(chuàng)建它的多個(gè)拷貝,每一個(gè)拷貝對應(yīng)它所作用的一種數(shù)據(jù)類型??匆幌?max()函數(shù)的實(shí)例,它返回傳遞給它的兩個(gè)數(shù)中較大的一個(gè)。對每一種要用到的數(shù)據(jù)類型都要編寫函數(shù)代碼。因此,你得為每一種數(shù)據(jù)類型編寫同樣的函數(shù)代碼,例如 int 型, float型, char型, double型。下面是 max()函數(shù)的幾個(gè)對應(yīng)不同數(shù)據(jù)類型的代碼版本: int max(int a, int b) { return ab? a:b。 } char max(char a, char b) { return ab? a:b。 《 C++教程 》 清華大學(xué)出版社 函數(shù)模板和模板函數(shù) double max(double a, double b) { return ab? a:b。 } float max(float a, float b) { return ab? a:b。 } 可以看出,這樣的四個(gè)函數(shù)的函數(shù)體都是相同的,其功能幾乎完全一樣,只是返回值或者參數(shù)不同。對不同的數(shù)據(jù)類型,相同的代碼必須重寫多次,而執(zhí)行的是相同的功能。這是對時(shí)間和精力的浪費(fèi),為避免這種浪費(fèi), C++為我們提供了一個(gè)方便的語法規(guī)則:函數(shù)模板。利用函數(shù)模板,可以建立一個(gè)具有通用功能的函數(shù),支持不同的函數(shù)參數(shù)和返回值。 《 C++教程 》 清華大學(xué)出版社 函數(shù)模板和模板函數(shù) 函數(shù)模板的語法形式如下: template class T … //函數(shù)定義 … 其中 T代表在函數(shù)模板中要使用的通用類型,在該函數(shù)的調(diào)用過程中, T被具體化。 例如對上面的重載函數(shù),我們只要聲明一個(gè)函數(shù)模板就可以了: template class T T max(T a, T b) { return ab? a: b } 《 C++教程 》 清華大學(xué)出版社 函數(shù)模板和模板函數(shù) 關(guān)鍵字 template表明正在聲明一個(gè)模板,數(shù)據(jù)類型參數(shù) T由模板參數(shù) class T給出。該模板的含義為:無論模板參數(shù)T實(shí)例為 int 、 float、 char或任意其他類型,包括類類型時(shí),函數(shù) max()就為實(shí)例化了的參數(shù)求最大值。這樣定義的 max()函數(shù)在進(jìn)行求最大值的操作時(shí),首先必須將模板參數(shù) T實(shí)例化,從這個(gè)意義上說,這里定義的 max()函數(shù)并不是一個(gè)完全的函數(shù),我們稱它為函數(shù)模板。因此,函數(shù)模板代表了一類函數(shù),但是它不是一個(gè)完全的函數(shù),必須將其模板參數(shù) T實(shí)例化后,才能完成具體函數(shù)的功能。將 T實(shí)例化的參數(shù)常常稱為模板實(shí)參。用模板實(shí)例化的函數(shù)稱為模板函數(shù),例如: void fun() { int i。 Mclass x, y。 《 C++教程 》 清華大學(xué)出版社 函數(shù)模板和模板函數(shù) int j=max(i, 0)。 //模板實(shí)參為整數(shù)類型 Mclass m=max(x, y)。 //模板實(shí)參為 Mclass類型 } 這里生成了兩個(gè)模板函數(shù) max(i, 0)和 max(x, y)。 max(i, 0)用模板實(shí)參 int將類型參數(shù) T實(shí)例化,而 max(x, y)將 T實(shí)例化為 Mclass類類型。 一個(gè)函數(shù)模板提供一類函數(shù)的抽象,它以任意類型 T為參數(shù)。由一個(gè)函數(shù)模板產(chǎn)生的函數(shù)稱為模板函數(shù),它的函數(shù)模板的具體實(shí)例。就象類與對象一樣,函數(shù)模板將具有相同程序正文的一類函數(shù)抽象出來,可以適應(yīng)任意類型 T。函數(shù)模板對某一特定類型的實(shí)例就是模板函數(shù)。函數(shù)模板代表了一類函數(shù),模板函數(shù)表示某一具體的函數(shù)。圖 91給出了函數(shù)模板和模板函數(shù)的關(guān)系。 《 C++教程 》 清華大學(xué)出版社 函數(shù)模板和模板函數(shù) 實(shí)例化 實(shí)例化 實(shí)例化 函數(shù)模板 max(T a , T b) 模板函數(shù) max(int a , int b) 模板函數(shù) max(double a ,double b) 模板函數(shù) max(X a , X b) …… 圖 91 《 C++教程 》 清華大學(xué)出版社 函數(shù)模板和模板函數(shù) 【 例 91】 編寫函數(shù)模板 max()使得能找出任意類型的兩個(gè)數(shù)中的最大數(shù)。 include template class type type max(type a,type b) { return ab? a:b。 } void main(){ coutmax(39。A39。,39。a39。) :max(39。A39。,39。a39。) endl。 coutmax(30,40) :max(30,40) endl。 coutmax(,) :max(,) endl。 } 《 C++教程 》 清華大學(xué)出版社 函數(shù)模板和模板函數(shù) 程序的輸出結(jié)果為: max(39。A39。,39。a39。) :a max(30,40) :40 max(,) : 【 例 92】 編寫能完成計(jì)算任意類型數(shù)的平方的函數(shù)模板。 include templateclass type type square(type a) { type b。 b=a*a。 return b。 } void main() 《 C++教程 》 清華大學(xué)出版社 函數(shù)模板和模板函數(shù) { coutsquare() :square() endl。 coutsquare(43) :square(43) endl。 } 程序的輸出結(jié)果為: square() : square(43) :1849 《 C++教程 》 清華大學(xué)出版社 重載函數(shù)模板 在有些特殊情況下需要對函數(shù)模板進(jìn)行重載, C++允許函數(shù)模板被一個(gè)或多個(gè)同名的非模板函數(shù)重載。考慮下面的例子: 【 例 93】 templateclass T T max(T a, T b) { return (ab)?a:b。 } void f(int i, char c) { max(i,i)。 max(c,c)。 max(i,c)。 //錯(cuò)誤: max(Int,char)無法匹配 《 C++教程 》 清華大學(xué)出版社 重載函數(shù)模板 max(c,i)。 //錯(cuò)誤 } 這里出現(xiàn)的錯(cuò)誤在于:模板類型并不知道 int 和 char之間能進(jìn)行隱式類型轉(zhuǎn)換。但是,這樣的轉(zhuǎn)換在 C++中是很普通的。為了解決這個(gè)問題, C++允許函數(shù)模板可以參與重載。 用戶可以用一個(gè)非模板函數(shù)重載一個(gè)同名的函數(shù)模板,例如,可以這樣定義: templateclass T T max(T a, T b) { return (ab)? a : b。 } int max(int, int)。 //顯式地聲明函數(shù) max(int, int),不是模板函數(shù) 《 C++教程 》 清華大學(xué)出版社 重載函數(shù)模板 void f(int i, char c) { max(i,i)。 //調(diào)用函數(shù) max(int, int) max(c,c)。 //調(diào)用模板 max(char,char) max(i,c)。 //調(diào)用函數(shù) max(Int,int) max(c,i)。 //調(diào)用函數(shù) max(int, int) } 這里,非模板函數(shù) max(int, int)重載了上述的函數(shù)模板 max(T a, T b),當(dāng)出現(xiàn)調(diào)用語句 max(i,c)。 和 max(c,i)。 時(shí),它執(zhí)行的是重載的非模板函數(shù)版本 max(int, int)。 還可以定義如下函數(shù): 《 C++教程 》 清華大學(xué)出版社 重載函數(shù)模板 char max(char * x, char * y) { return(strcmp(x,y)0)?x :y。 } 非模板函數(shù) max(ichar * x, char * y )也重載了上述的函數(shù)模板,當(dāng)出現(xiàn)調(diào)用語句 max( a, b);時(shí),它執(zhí)行的是這個(gè)重載的非模板函數(shù)的版本,其中 a和 b都是字符串變量。 在 C++中,函數(shù)模板與同名的非模板函數(shù)的重載方法遵循下列約定: 1.尋找一個(gè)參數(shù)完全匹配的函數(shù),如果找到了,就調(diào)用它; 2.尋找一個(gè)函數(shù)模板,將其實(shí)例化產(chǎn)生一個(gè)匹配的模板函數(shù),如果找到了,就調(diào)用它; 3.試一試低一級的對函數(shù)的重載方法,如通過類型轉(zhuǎn)換可 《 C++教程 》 清華大學(xué)出版社 重載函數(shù)模板 產(chǎn)生參數(shù)匹配等,如果找到了,就調(diào)用它。 如果 3均未找到匹配的函數(shù) , 那么這個(gè)調(diào)用是一個(gè)錯(cuò)誤 。 如果在第一 步有多于一個(gè)的選擇 , 那么這個(gè)調(diào)用是意義不明確的 , 也會產(chǎn)生一個(gè)錯(cuò)誤 。 以上重載模板函數(shù)的規(guī)則 , 可能會引起許多不必要的函數(shù)定義的產(chǎn)生 , 但一個(gè)好的實(shí)現(xiàn)應(yīng)該是充分利用這個(gè)功能的簡單性來抑制不合邏輯的回答 。 《 C++教程 》 清華大學(xué)出版社 類模板和模板類 一個(gè)類模板 ( 也稱類屬類或類生成類 ) 允許用戶為類定義一種模式 。 考慮如下向量類 ( 一維數(shù)組 ) 的例子 。 不管整形向量還是任何其他類型的向量 , 在所有類型上進(jìn)行的基本操作是相同的 ( 如插入 、 刪除 、 檢索等 ) 。 由于將每個(gè)元素的類型當(dāng)做一個(gè)類的類型參數(shù)來對待 , 系統(tǒng)可快速生成類型安全的類定義 。 類模板定義語法: template class type1,…… class class_name { public: … type1 var1 。 《 C++教程 》 清華大學(xué)出版社 類模板和模板類 … }。 【 例 94】 include templateclass T class Vector { T * data。 int size。 public: Vector(int)。 ~ Vector( ) { delete [ ]data。 《 C++教程 》 清華大學(xué)出版社 類模板和模板類 } T amp。 operator[ ](int i) { return data[i]。 } }。 其中 , 關(guān)鍵字 template表示正在聲
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1