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

正文內(nèi)容

清華大學c課件第9章-資料下載頁

2025-10-09 17:14本頁面
  

【正文】 s 類 ? 函數(shù)模板 vs 函數(shù) ? 模板實例化 – 隱含實例化 – 多文件結(jié)構(gòu)中模板的組織 – 顯式實例化 ? 為模板定義特殊的實現(xiàn) – 模板的特化 – 類模板的偏特化 – 函數(shù)模板的重載 75 C++語言程序設(shè)計 清華大學 鄭莉 類模板 vs 類 ? 類模板不能表示具體的數(shù)據(jù)類型,但類模板的實例化類是數(shù)據(jù)類型 ? 例:如要使 reverse函數(shù)接收 Array的參數(shù) – void reverse(Array amp。arr)。 ? 錯誤 ! Array是模板,不能當作一個數(shù)據(jù)類型。 – void reverse(Arrayint amp。arr)。 ? 正確。 Arrayint是數(shù)據(jù)類型。 – template class T reverse (ArrayT amp。arr)。 ? 正確。 T雖未定,但 ArrayT表示的是一個類模板實例。 ? 同 一模板在不同參數(shù)下的實例是完全無關(guān)的類型 – 彼此不兼容,無法相互賦值 – 通過 Storeint的對象調(diào)用的成員函數(shù),無法直接訪問 Storedouble對象的私有成員 76 深度探索 C++語言程序設(shè)計 清華大學 鄭莉 函數(shù)模板 vs 函數(shù) ? 函數(shù)模板本身不是函數(shù) – 編譯器不會為函數(shù)模板本身生成目標代碼 – 只有函數(shù)模板的實例能被調(diào)用 ? 例:考慮下列模板 template class T void outputArray(const T *array, int count)。 – 若 a是 int數(shù)組, outputArray(a, 10)等價于outputArrayint(a, 10),被調(diào)用的是outputArray實例 77 深度探索 C++語言程序設(shè)計 清華大學 鄭莉 隱含實例化 ? 模板 的實例化 – 根據(jù) 函數(shù)模板生成具體的函數(shù)、或根據(jù)類模板生成具體的類的 過程 ? 隱含實例化 – 編譯器會自動按需對模板實例化 – 所有會被使用的模板實例會被生成 – 對類模板的隱含實例化并不意味著對它成員函數(shù)的定義也進行實例化,當類模板成員函數(shù)會被使用時,才會被實例化 78 深度探索 C++語言程序設(shè)計 清華大學 鄭莉 多文件結(jié)構(gòu)中模板的組織 ? 模板實例化機制帶來的新問題 – 不能把下面與模板相關(guān)的定義 放在與頭文件分離的源文件 中 ? 函數(shù)模板的定義 ? 類模板成員函數(shù) ? 類模板靜態(tài)數(shù)據(jù)成員 ? 解決方法 – 把與模板相關(guān)的定義放在頭文件中 ——最通常的解決辦法 ? 編譯器有特殊處理,保證不會有連接沖突 – 使用 export關(guān)鍵字 ——編譯器支持不好 – 使用模板的顯式實例化機制 79 深度探索 C++語言程序設(shè)計 清華大學 鄭莉 顯式實例化 ? 語法形式 – template 實例化目標的聲明 。 ? 作用 – 一 個模板實例無論是否在本編譯單元中被使用,都會被生成 ? 例 – template void outputArray(const int *array, int count)。 – template class Storedouble。 ? 在多文件結(jié)構(gòu)中的用途 – 使用在程序中可能會被用到的各種參數(shù)對模板顯式實例化,使得與模板相關(guān)的定義可以放在源文件中 80 深度探索 C++語言程序設(shè)計 清華大學 鄭莉 為模板定義特殊的實現(xiàn) ? 為什么要定義特殊的實現(xiàn)? – 模板抓住了算法與數(shù)據(jù)結(jié)構(gòu)上的共性,但忽略了類型的個性 – 設(shè)計 出的模板對于具體的數(shù)據(jù)類型而言未必具有最好的效率 ? 例: Stack類模板 – 如果以 bool作為類型參數(shù),則有 7/8的空間浪費 – Stackbool,32中的 list數(shù)組占 32個字節(jié),實際上 4個字節(jié)就夠 81 深度探索 C++語言程序設(shè)計 清華大學 鄭莉 模板的特化 ? 什么是特化 – 為一個模板在特定參數(shù)下提供特殊定義 ? 既適用于類模板,又適用于函數(shù)模板 ? 對 Stackbool, 32特化的類定義 template class Stackbool, 32 { private: unsigned list。 int top。 public: Stack()。 void push(bool item)。 bool pop()。 void clear()。 bool peek() const。 bool isEmpty() const。 bool isFull() const。 }。 82 深度探索 //特化類的部分成員函數(shù)定義 void Stackbool, 32::push(bool item) { assert(!isFull())。 ++top。 list = (list 1) | (item ? 1 : 0)。 } bool Stackbool, 32::pop() { assert(!isEmpty())。 bool result = ((list amp。 1) == 1)。 list = 1。 top。 return result。 } 83 C++語言程序設(shè)計 清華大學 鄭莉 類模板的偏特化 ? 對 Stackbool,32特化的問題 – 適用范圍過窄,SIZE必須是 32 ? 類模板的偏特化 – 將一部分參數(shù)固定,而使另一部分參數(shù)可變,設(shè)計特殊的定義 – 只適用于類模板 ? 對 Stack偏特化的類定義 template int SIZE class Stackbool, SIZE { private: enum { UNIT_BITS = sizeof(unsigned) * 8, ARRAY_SIZE = (SIZE 1) / UNIT_BITS + 1 }。 unsigned list[ARRAY_SIZE]。 int top。 public: Stack()。 void push(bool item)。 bool pop()。 void clear()。 bool peek() const。 bool isEmpty() const。 bool isFull() const。 }。 84 深度探索 //偏特化類的部分成員函數(shù)定義 template int SIZE void Stackbool, SIZE::push(bool item) { assert(!isFull())。 int index = ++top / UNIT_BITS。 list[index] = (list[index] 1) | (item ? 1 : 0)。 } template int SIZE bool Stackbool, SIZE::pop() { assert(!isEmpty())。 int index = top / UNIT_BITS。 bool result = ((list[index] amp。 1) == 1)。 list[index] = 1。 return result。 } 85 C++語言程序設(shè)計 清華大學 鄭莉 類模板的偏特化 ? 偏特化不僅允許將一部分模板參數(shù)固定,還允許將某一個模板參數(shù)所能表示的類型范圍縮窄,例 – template class T class X { … }。 ? 原模板, T可以是所有類型參數(shù) – template class T class XT * { … }。 ? 針對指針類型進行偏特化 – template class T class Xconst T * { … }。 ? 針對常指針類型進行偏特化 – 對于 Xconst int *,后兩個偏特化版本皆能匹配,但由于第二個更為特殊,會被選中 86 深度探索 C++語言程序設(shè)計 清華大學 鄭莉 函數(shù)模板的重載 ? 函數(shù)模板不支持偏特化,但可重載,從而完成與類模板偏特化類似的功能 ? 若對函數(shù)模板的一次使用能與多個函數(shù)模板匹配,最特殊的那個會被選中 ? 例:針對參數(shù)為指針類型的情形,為myMax定義特殊實現(xiàn) template class T T myMax(T a, T b) { return (a b) ? a : b。 } template class T T *myMax(T *a, T *b) { return (*a *b) ? a : b。 } 87 深度探索 C++語言程序設(shè)計 清華大學 鄭莉 92 小結(jié)與復習建議 ? 主要內(nèi)容 – 模板、群體類和群體數(shù)據(jù)的組織 ? 達到的目標 – 理解模板的作用,學會簡單的應(yīng)用。 – 以群體類以及查找、排序算法為綜合例題,對前面章節(jié)的內(nèi)容進行全面復習; – 掌握一些常用的數(shù)據(jù)結(jié)構(gòu)和算法,能夠解決一些略復雜的問題,也為下一章學習 C++標準模板庫打下基礎(chǔ)。 ? 實驗任務(wù) – 實驗九
點擊復制文檔內(nèi)容
教學課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1