第9章習(xí)題答案_第1頁(yè)
第9章習(xí)題答案_第2頁(yè)
第9章習(xí)題答案_第3頁(yè)
第9章習(xí)題答案_第4頁(yè)
第9章習(xí)題答案_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第九章 模板1 選擇題(1)關(guān)于函數(shù)模板,描述錯(cuò)誤的是( A )。(A) 函數(shù)模板必須由程序員實(shí)例化為可執(zhí)行的函數(shù)模板(B) 函數(shù)模板的實(shí)例化由編譯器實(shí)現(xiàn)(C) 一個(gè)類定義中,只要有一個(gè)函數(shù)模板,則這個(gè)類是類模板(D) 類模板的成員函數(shù)都是函數(shù)模板,類模板實(shí)例化后,成員函數(shù)也隨之實(shí)例化(2)下列的模板說(shuō)明中,正確的是( c )。(A) template (B) template (C) template (D) template ( typedef T1, typedef T2 )(3)假設(shè)有函數(shù)模板定義如下: template Max( T a, T b ,T &c) c= a + b ;

2、下列選項(xiàng)正確的是( 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)關(guān)于類模板,描述錯(cuò)誤的是( A )。(A) 一個(gè)普通基類不能派生類模板(B) 類模板可以從普通類派生,也可以從類模板派生(C) 根據(jù)建立對(duì)象時(shí)的實(shí)際數(shù)據(jù)類型,編譯器把類模板實(shí)例化為模板類(D) 函數(shù)的類模板參數(shù)需生成模板類并通過(guò)構(gòu)造函數(shù)實(shí)例化(5)類模

3、板的使用實(shí)際上是將類模板實(shí)例化成一個(gè)(C)。A函數(shù) B對(duì)象 C類 D抽象類(6)類模板的模板參數(shù)(D)。 A只能作為數(shù)據(jù)成員的類型 B只可作為成員函數(shù)的返回類型C只可作為成員函數(shù)的參數(shù)類型 D以上三種均可(7)類模板的實(shí)例化(A)。 A在編譯時(shí)進(jìn)行 B屬于動(dòng)態(tài)聯(lián)編C在運(yùn)行時(shí)進(jìn)行 D在連接時(shí)進(jìn)行(8)以下類模板定義正確的為(A)。Atemplate BtemplateCtemplate Dtemplate2 閱讀下列程序,寫出執(zhí)行結(jié)果(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抽象類和類模板都是提供抽象的機(jī)制,請(qǐng)分析它們的區(qū)別和應(yīng)用場(chǎng)合?!窘獯稹砍橄箢愔辽侔粋€(gè)純虛函數(shù),純虛函數(shù)抽象了類體系中一些類似操作的公共界面,它不依賴于數(shù)據(jù),也沒(méi)有操作定義。派生類必須定義實(shí)現(xiàn)版本。抽象類用于程序開發(fā)時(shí)對(duì)功能的統(tǒng)一策劃,利用程序運(yùn)行的多態(tài)性自動(dòng)匹配實(shí)行不同版本的函數(shù)。類模板抽象了數(shù)據(jù)類型,稱為類屬參數(shù)。成員函數(shù)描述了類型不同,邏輯操作相同的功能

6、集。編譯器用建立對(duì)象的數(shù)據(jù)類型參數(shù)實(shí)例化為模板類,生成可運(yùn)行的實(shí)體。類模板用于抽象數(shù)據(jù)對(duì)象類型不同,邏輯操作完全相同類定義。這種數(shù)據(jù)類型的推導(dǎo)必須在語(yǔ)言功能的范疇之內(nèi)的。4類模板能夠聲明什么形式的友員?當(dāng)類模板的友員是函數(shù)模板時(shí),它們可以定義不同形式的類屬參數(shù)嗎?請(qǐng)你寫個(gè)驗(yàn)證程序試一試?!窘獯稹款惸0蹇梢月暶鞯挠褑T形式有:普通函數(shù)、函數(shù)模板、普通類成員函數(shù)、類模板成員函數(shù)以及普通類、類模板。當(dāng)類模板的友員是函數(shù)模板時(shí),它們可以定義不同形式的類屬參數(shù)。程序略。5類模板的靜態(tài)數(shù)據(jù)成員可以是抽象類型嗎?它們的存儲(chǔ)空間是什么時(shí)候建立的?請(qǐng)你用驗(yàn)證程序試一試?!窘獯稹款惸0宓撵o態(tài)數(shù)據(jù)成員可以是抽象類型。

7、它們的存儲(chǔ)空間在生成具體模板類的時(shí)候建立,即每生成一個(gè)模板類同時(shí)建立靜態(tài)儲(chǔ)存空間并做一次文件范圍的初始化。程序略。6設(shè)計(jì)一個(gè)函數(shù)模板,其中包括數(shù)據(jù)成員T an以及對(duì)其進(jìn)行排序的成員函數(shù) sort( ),模板參數(shù)T可實(shí)例化成字符串?!窘獯稹?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設(shè)計(jì)一個(gè)類模板,其中包括數(shù)據(jù)成員T an以及在其中進(jìn)行查找數(shù)據(jù)元素的函數(shù)int search(T)模板參

9、數(shù) T可實(shí)例化成字符串。【解答】#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實(shí)例化,建立模板類對(duì)象A douAry;/用double實(shí)例化,建立模板類對(duì)象int i;for(i=0;i5;i+) intAry.SetElement(i,i+3);for(i=0;i=0)couti=0)coutiendl;return 0;8設(shè)計(jì)一個(gè)單向鏈表類模板,結(jié)點(diǎn)數(shù)據(jù)域中數(shù)據(jù)從小到大排列,并設(shè)計(jì)插入、刪除節(jié)點(diǎn)的成員函數(shù)。【解答】#includeusing namesp

11、ace std;templateclass List;templateclass NodeT info; /數(shù)據(jù)域Node *link; /指針域public:Node(); /生成頭結(jié)點(diǎn)的構(gòu)造函數(shù)Node(const T & data);/生成一般結(jié)點(diǎn)的構(gòu)造函數(shù)friend class List;template Node:Node()link=NULL;template Node:Node(const T & data)info=data;link=NULL;/定義鏈表類templateclass ListNode *head; /鏈表頭指針和尾指針public:List(); /構(gòu)造函數(shù)

12、,生成頭結(jié)點(diǎn)(空鏈表)List(); /析構(gòu)函數(shù)void MakeEmpty(); /清空一個(gè)鏈表,只余表頭結(jié)點(diǎn)Node* Find(T data); /搜索數(shù)據(jù)域與data相同的結(jié)點(diǎn),返回該結(jié)點(diǎn)的地址void PrintList(); /打印鏈表的數(shù)據(jù)域void InsertOrder(Node *p); /按升序生成鏈表Node* CreatNode(T data); /創(chuàng)建一個(gè)結(jié)點(diǎn)(孤立結(jié)點(diǎn))Node* DeleteNode(Node* p); /刪除指定結(jié)點(diǎn);templateList:List()head=new Node(-9999);/頭結(jié)點(diǎn),最小的數(shù)據(jù)從小到大插入template

13、List:List()MakeEmpty();delete head;templatevoid List:MakeEmpty()Node *tempP;while(head-link!=NULL)tempP=head-link;head-link=tempP-link; /把頭結(jié)點(diǎn)后的第一個(gè)節(jié)點(diǎn)從鏈中脫離delete tempP; /刪除(釋放)脫離下來(lái)的結(jié)點(diǎn)template Node* List:Find(T data)Node *tempP=head-link;while(tempP!=NULL & tempP-info!=data) tempP=tempP-link;return tem

14、pP; /搜索成功返回該結(jié)點(diǎn)地址,不成功返回NULLtemplatevoid List:PrintList()Node* tempP=head-link;while(tempP!=NULL)coutinfolink;coutendl;templatevoid List:InsertOrder(Node *p)Node *tempP=head,*tempQ=head; /tempQ指向tempP前面的一個(gè)節(jié)點(diǎn)while(tempP!=NULL)if(p-infoinfo)break; /找第一個(gè)比插入結(jié)點(diǎn)大的結(jié)點(diǎn),由tempP指向tempQ=tempP;tempP=tempP-link;p-li

15、nk=tempP;tempQ-link=p;templateNode* List:CreatNode(T data)/建立新節(jié)點(diǎn)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請(qǐng)輸入一個(gè)要求刪除的整數(shù)j;P1=list1.Find(j);if(P1!=NULL)P1=list1.DeleteNode(P1);delete P1;list1.PrintList();else cout未找到endl;cout請(qǐng)輸入一個(gè)要求插入的整數(shù)j;P1=list1.CreatNode(j);list1.Inse

17、rtOrder(P1);list1.PrintList();list1.MakeEmpty();/清空l(shuí)ist1list1.PrintList();return 0;9為單鏈表類模板增加一個(gè)復(fù)制構(gòu)造函數(shù)和賦值運(yùn)算符(=)。在上題基礎(chǔ)上,List類增加一個(gè)復(fù)制構(gòu)造函數(shù)和賦值運(yùn)算符(=)【解答】templateList:List(List& l)head=new Node(-9999);/現(xiàn)建立頭結(jié)點(diǎn)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();/先釋放原來(lái)鏈表的數(shù)據(jù)結(jié)點(diǎn)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請(qǐng)輸入一個(gè)要求刪除的整數(shù)j;P1=list1.Find(j);if(P1!=NULL)P1=list1.DeleteNode(P1);delete P1;list1.PrintList();else cout未找到endl;cout請(qǐng)輸入一個(gè)要求插入的整數(shù)j;P1=list1.CreatNode(j);list1.InsertOrder(P1);list1.PrintList();list2=list1;list2.PrintList();List list3=list1;list3.PrintList();cout請(qǐng)輸入一個(gè)要求刪除的整數(shù)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論