




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第九章 模板1 選擇題(1)關于函數模板,描述錯誤的是( A )。(A) 函數模板必須由程序員實例化為可執行的函數模板(B) 函數模板的實例化由編譯器實現(C) 一個類定義中,只要有一個函數模板,則這個類是類模板(D) 類模板的成員函數都是函數模板,類模板實例化后,成員函數也隨之實例化(2)下列的模板說明中,正確的是( c )。(A) template (B) template (C) template (D) template ( typedef T1, typedef T2 )(3)假設有函數模板定義如下: template Max( T a, T b ,T &c) c= a + b ;
2、下列選項正確的是( B )。(A) int x, y; char z ;(B) double x, y, z ; Max( x, y, z ) ; Max( x, y, z ) ;(C) int x, y; float z ;(D) float x; double y, z ;Max( x, y, z ); Max( x, y, z ) ;(4)關于類模板,描述錯誤的是( A )。(A) 一個普通基類不能派生類模板(B) 類模板可以從普通類派生,也可以從類模板派生(C) 根據建立對象時的實際數據類型,編譯器把類模板實例化為模板類(D) 函數的類模板參數需生成模板類并通過構造函數實例化(5)類模
3、板的使用實際上是將類模板實例化成一個(C)。A函數 B對象 C類 D抽象類(6)類模板的模板參數(D)。 A只能作為數據成員的類型 B只可作為成員函數的返回類型C只可作為成員函數的參數類型 D以上三種均可(7)類模板的實例化(A)。 A在編譯時進行 B屬于動態聯編C在運行時進行 D在連接時進行(8)以下類模板定義正確的為(A)。Atemplate BtemplateCtemplate Dtemplate2 閱讀下列程序,寫出執行結果(1) #include using namespace std;template void fun( T &x, T &y ) T temp; temp = x;
4、 x = y; y = temp;int main() int i , j; i = 10; j = 20; fun( i, j ); cout i = i t j = j endl; double a , b; a = 1.1; b = 2.2; fun( a, b ); cout a = a t b = b endl;【解答】i=20 j=10a=2.2 b=1.1(2)#include using namespace std;template class Base public: Base( T i , T j ) x = i; y = j; T sum() return x + y;
5、private: T x , y; ;int main() Base obj2(3.3,5.5); cout obj2.sum() endl; Base obj1(3,5); cout obj1.sum() endl;【解答】8.883抽象類和類模板都是提供抽象的機制,請分析它們的區別和應用場合。【解答】抽象類至少包含一個純虛函數,純虛函數抽象了類體系中一些類似操作的公共界面,它不依賴于數據,也沒有操作定義。派生類必須定義實現版本。抽象類用于程序開發時對功能的統一策劃,利用程序運行的多態性自動匹配實行不同版本的函數。類模板抽象了數據類型,稱為類屬參數。成員函數描述了類型不同,邏輯操作相同的功能
6、集。編譯器用建立對象的數據類型參數實例化為模板類,生成可運行的實體。類模板用于抽象數據對象類型不同,邏輯操作完全相同類定義。這種數據類型的推導必須在語言功能的范疇之內的。4類模板能夠聲明什么形式的友員?當類模板的友員是函數模板時,它們可以定義不同形式的類屬參數嗎?請你寫個驗證程序試一試。【解答】類模板可以聲明的友員形式有:普通函數、函數模板、普通類成員函數、類模板成員函數以及普通類、類模板。當類模板的友員是函數模板時,它們可以定義不同形式的類屬參數。程序略。5類模板的靜態數據成員可以是抽象類型嗎?它們的存儲空間是什么時候建立的?請你用驗證程序試一試。【解答】類模板的靜態數據成員可以是抽象類型。
7、它們的存儲空間在生成具體模板類的時候建立,即每生成一個模板類同時建立靜態儲存空間并做一次文件范圍的初始化。程序略。6設計一個函數模板,其中包括數據成員T an以及對其進行排序的成員函數 sort( ),模板參數T可實例化成字符串。【解答】#include #include using namespace std;templatevoid Sort(T* a,int n)int i,j;T t;for(i=0;in-1;i+) for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=t; templatevoid Print(T* a,int n)int i;for(i=0;in;
8、i+)coutai ;coutendl;int main()string Str10=Zhang,Li,Wang,Qian,Zhao,Wu,Xu,Tang,Shen,Liang;int Int8=20,12,0,-5,9,-18,6,11;double Dou7=3.07,8.12,-0.45,6,10,-9,7.29;Sort(Str,10);Sort(Int,8);Sort(Dou,7);Print(Str,10);Print(Int,8);Print(Dou,7);return 0;7設計一個類模板,其中包括數據成員T an以及在其中進行查找數據元素的函數int search(T)模板參
9、數 T可實例化成字符串。【解答】#include using namespace std; templateclass A int size; T* element;public: A(); A(); int Search(T); void SetElement(int index,const T& value);templateA:A()size=n1? n:1; element=new Tsize;templateA:A() delete element;templateint A:Search(T t)int i;for(i=0;isize;i+)if(elementi=t)return
10、 i;return -1;templatevoid A:SetElement(int index,const T& value) elementindex=value;int main()A intAry;/用int實例化,建立模板類對象A douAry;/用double實例化,建立模板類對象int i;for(i=0;i5;i+) intAry.SetElement(i,i+3);for(i=0;i=0)couti=0)coutiendl;return 0;8設計一個單向鏈表類模板,結點數據域中數據從小到大排列,并設計插入、刪除節點的成員函數。【解答】#includeusing namesp
11、ace std;templateclass List;templateclass NodeT info; /數據域Node *link; /指針域public:Node(); /生成頭結點的構造函數Node(const T & data);/生成一般結點的構造函數friend class List;template Node:Node()link=NULL;template Node:Node(const T & data)info=data;link=NULL;/定義鏈表類templateclass ListNode *head; /鏈表頭指針和尾指針public:List(); /構造函數
12、,生成頭結點(空鏈表)List(); /析構函數void MakeEmpty(); /清空一個鏈表,只余表頭結點Node* Find(T data); /搜索數據域與data相同的結點,返回該結點的地址void PrintList(); /打印鏈表的數據域void InsertOrder(Node *p); /按升序生成鏈表Node* CreatNode(T data); /創建一個結點(孤立結點)Node* DeleteNode(Node* p); /刪除指定結點;templateList:List()head=new Node(-9999);/頭結點,最小的數據從小到大插入template
13、List:List()MakeEmpty();delete head;templatevoid List:MakeEmpty()Node *tempP;while(head-link!=NULL)tempP=head-link;head-link=tempP-link; /把頭結點后的第一個節點從鏈中脫離delete tempP; /刪除(釋放)脫離下來的結點template Node* List:Find(T data)Node *tempP=head-link;while(tempP!=NULL & tempP-info!=data) tempP=tempP-link;return tem
14、pP; /搜索成功返回該結點地址,不成功返回NULLtemplatevoid List:PrintList()Node* tempP=head-link;while(tempP!=NULL)coutinfolink;coutendl;templatevoid List:InsertOrder(Node *p)Node *tempP=head,*tempQ=head; /tempQ指向tempP前面的一個節點while(tempP!=NULL)if(p-infoinfo)break; /找第一個比插入結點大的結點,由tempP指向tempQ=tempP;tempP=tempP-link;p-li
15、nk=tempP;tempQ-link=p;templateNode* List:CreatNode(T data)/建立新節點Node*tempP=new Node(data);return tempP;templateNode* List:DeleteNode(Node* p)Node* tempP=head-link,*tempQ=head,*tempC;while(tempP!=NULL & tempP!=p)tempQ=tempP;tempP=tempP-link;tempC=tempP;tempQ-link=tempP-link;return tempC;int main()Nod
16、e * P1;List list1;int a10=20,12,0,-5,9,-18,6,11,5,3,i,j;for(i=0;i10;i+)P1=list1.CreatNode(ai);list1.InsertOrder(P1);list1.PrintList();cout請輸入一個要求刪除的整數j;P1=list1.Find(j);if(P1!=NULL)P1=list1.DeleteNode(P1);delete P1;list1.PrintList();else cout未找到endl;cout請輸入一個要求插入的整數j;P1=list1.CreatNode(j);list1.Inse
17、rtOrder(P1);list1.PrintList();list1.MakeEmpty();/清空list1list1.PrintList();return 0;9為單鏈表類模板增加一個復制構造函數和賦值運算符(=)。在上題基礎上,List類增加一個復制構造函數和賦值運算符(=)【解答】templateList:List(List& l)head=new Node(-9999);/現建立頭結點Node* tempP=l.head-link,*tempC;while(tempP!=NULL)tempC=CreatNode(tempP-info);InsertAfter(tempC);temp
18、P=tempP-link;templateList& List:operator=(List& l)MakeEmpty();/先釋放原來鏈表的數據結點Node* tempP=l.head-link,*tempC;while(tempP!=NULL)tempC=CreatNode(tempP-info);InsertAfter(tempC);tempP=tempP-link;return *this;int main()Node * P1;List list1,list2;int a10=20,12,0,-5,9,-18,6,11,5,3,i,j;for(i=0;i10;i+)P1=list1.
19、CreatNode(ai);list1.InsertOrder(P1);list1.PrintList();cout請輸入一個要求刪除的整數j;P1=list1.Find(j);if(P1!=NULL)P1=list1.DeleteNode(P1);delete P1;list1.PrintList();else cout未找到endl;cout請輸入一個要求插入的整數j;P1=list1.CreatNode(j);list1.InsertOrder(P1);list1.PrintList();list2=list1;list2.PrintList();List list3=list1;list3.PrintList();cout請輸入一個要求刪除的整數j;P1=list1.Find(j);if(P1!=NULL)P1=list1.DeleteNode(P1);delete P1;list1.PrintList();else cout未找到endl;list2=list3=list1;list2.PrintList();lis
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年保健按摩師(按摩保健操練習)職業技能鑒定試卷
- 2025年評茶員(二級)茶葉投資分析與風險評估考試試卷
- 2025年電子商務師(中級)考試試卷:電商數據分析方法與應用試題解析
- 2025年德語TestDaF閱讀真題試卷(德語考試)攻略
- 2025年小學英語畢業考試模擬卷(英語綜合實踐口語與寫作)
- 2025年電子商務師(高級)考試試卷:電商數據分析與用戶畫像
- 軟件業軟件開發流程優化與管理方法研究
- 農村合作社與農戶土地使用權流轉協議
- 線上直播帶貨平臺合作協議
- 2025年大學英語四級考試模擬試卷:翻譯能力提升與真題分析
- 房屋建筑與市政工程重大事故安全隱患判定標準解讀課件
- DB43-T 1267-2023 機動車檢驗機構建設和運行管理規范
- 公司稅務注銷協議書
- 2025年人力資源管理專業期末考試卷及答案
- 防溺水安全家長會課件
- 第四單元:促銷問題(方案選擇問題)專項練習(學生版+解析)-2024-2025學年六年級數學上冊培優精練(北師大版)
- 放射科實習生入科教育
- 國家開放大學國開電大《幼兒園課程基礎》形考任務1~4答案
- 2025至2030中國翡翠市場經營績效與投資狀況研究報告
- 神經可塑性在教育中的應用探索-全面剖析
- 2025年安全生產月主題培訓課件
評論
0/150
提交評論