版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1.概念填空題1.1 C+最重要的特性之一就是代碼重用,為了實(shí)現(xiàn)代碼重用,代碼必須具有 通用性 。通用代碼需要不受數(shù)據(jù) 類型 的影響,并且可以自動(dòng)適應(yīng)數(shù)據(jù)類型的變化。這種程序設(shè)計(jì)類型稱為 參數(shù)化 程序設(shè)計(jì)。模板是C+支持參數(shù)化程序設(shè)計(jì)的工具,通過它可以實(shí)現(xiàn)參數(shù)化 多態(tài)性 性。1.2函數(shù)模板的定義形式是template 返回類型 函數(shù)名(形式參數(shù)表)。其中,中參數(shù)可以有 多 個(gè),用逗號(hào)分開。模板參數(shù)主要是 模板類型 參數(shù)。它代表一種類型,由關(guān)鍵字 typename 或 class 后加一個(gè)標(biāo)識(shí)符構(gòu)成,標(biāo)識(shí)符代表一個(gè)潛在的內(nèi)置或用戶定義的類型參數(shù)。類型參數(shù)由可以是任意合法標(biāo)識(shí)符。C+規(guī)定參數(shù)名必須
2、在函數(shù)定義中至少出現(xiàn)一次。1.3編譯器通過如下匹配規(guī)則確定調(diào)用那一個(gè)函數(shù):首先,尋找最符合 函數(shù)名 和 參數(shù)類型 的一般函數(shù),若找到則調(diào)用該函數(shù);否則尋找一個(gè) 函數(shù)模板 ,將其實(shí)例化成一個(gè) 模板函數(shù) ,看是否匹配,如果匹配,就調(diào)用該 模板函數(shù) ;再則,通過 類型轉(zhuǎn)換 規(guī)則進(jìn)行參數(shù)的匹配。如果還沒有找到匹配的函數(shù)則調(diào)用錯(cuò)誤。如果有多于一個(gè)函數(shù)匹配,則調(diào)用產(chǎn)生 二義性 ,也將產(chǎn)生錯(cuò)誤。1.4類模板使用戶可以為類聲明一種模式,使得類中的某些數(shù)據(jù)成員、某些成員函數(shù)的參數(shù)、某些成員函數(shù)的返回值能取 任意類型 (包括 系統(tǒng)預(yù)定類型 和 用戶自定義的類型)。類是對(duì)一組對(duì)象的公共性質(zhì)的抽象,而類模板則是對(duì)不同
3、類的 數(shù)據(jù)類型? 的抽象,因此類模板是屬于更高層次的抽象。由于類模板需要一種或多種 類型 參數(shù),所以類模板也常常稱為 參數(shù)化類 。2. 簡(jiǎn)答題2.1簡(jiǎn)述函數(shù)模板生成函數(shù)的過程。2.2 簡(jiǎn)述類模板生成對(duì)象的過程。2.3 簡(jiǎn)述函數(shù)模板與模板函數(shù)、類模板與模板類的區(qū)別。3. 選擇題3.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í)例化3.2下列的模板說(shuō)明中,正確的是(D )。 A.template B.te
4、mplate C.template D.template3.3 函數(shù)模板定義如下: template Max( T a, T b ,T &c)c=a+b;下列選項(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);3.4 下列有關(guān)模板的描述錯(cuò)誤的是(D)。A 模板把數(shù)據(jù)類型作為一個(gè)設(shè)計(jì)參數(shù),稱為參數(shù)化程序設(shè)計(jì)。B 使用時(shí),模板參數(shù)與函數(shù)參數(shù)相同,是
5、按位置而不是名稱對(duì)應(yīng)的。C 模板參數(shù)表中可以有類型參數(shù)和非類型參數(shù)。D 類模板與模板類是同一個(gè)概念。3.5類模板的使用實(shí)際上是將類模板實(shí)例化成一個(gè)(C)。A函數(shù) B對(duì)象 C類 D抽象類3.6類模板的模板參數(shù)(D)。 A只能作為數(shù)據(jù)成員的類型 B只可作為成員函數(shù)的返回類型C只可作為成員函數(shù)的參數(shù)類型 D以上三種均可3.7類模板的實(shí)例化(A)。 A在編譯時(shí)進(jìn)行 B屬于動(dòng)態(tài)聯(lián)編C在運(yùn)行時(shí)進(jìn)行 D在連接時(shí)進(jìn)行3.8以下類模板定義正確的為(A)。Atemplate BtemplateCtemplate Dtemplate4編程題4.1設(shè)計(jì)一個(gè)函數(shù)模板,其中包括數(shù)據(jù)成員T an以及對(duì)其進(jìn)行排序的成員函數(shù)
6、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;i+)coutai ;coutendl;int main()string Str10=Zhang,Li,Wang,Qian,Zhao,Wu,Xu,Tang,Shen,Liang;int Int8
7、=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;4.2設(shè)計(jì)一個(gè)類模板,其中包括數(shù)據(jù)成員T an以及在其中進(jìn)行查找數(shù)據(jù)元素的函數(shù)int search(T)模板參數(shù) T可實(shí)例化成字符串。#include using namespace std; templateclass A int size; T* element;public: A(); A()
8、; 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 i;return -1;templatevoid A:SetElement(int index,const T& value) elementindex=value;int main()A int
9、Ary;/用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;4.3設(shè)計(jì)一個(gè)單向鏈表類模板,節(jié)點(diǎn)數(shù)據(jù)域中數(shù)據(jù)從小到大排列,并設(shè)計(jì)插入、刪除節(jié)點(diǎn)的成員函數(shù)。#includeusing namespace std;templateclass List;templateclass NodeT info; /數(shù)據(jù)域Node *link; /指針域public:Node(); /生成頭結(jié)點(diǎn)的構(gòu)造函數(shù)No
10、de(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ù),生成頭結(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)的地址
11、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ù)從小到大插入templateList:List()MakeEmpty();delete head;templatevoid List:MakeEmpty()Node *tempP;while(head-link!=NULL)tem
12、pP=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 tempP; /搜索成功返回該結(jié)點(diǎn)地址,不成功返回NULLtemplatevoid List:PrintList()Node* tempP=head-link;while(tempP!=NULL)coutin
13、folink;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-link=tempP;tempQ-link=p;templateNode* List:CreatNode(T data)/建立新節(jié)點(diǎn)Node*tempP=new Node(data);return temp
14、P;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()Node * 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.I
15、nsertOrder(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();list1.MakeEmpty();/清空l(shuí)ist1list1.PrintList();return 0;4.4 為單鏈表類模板增加一個(gè)復(fù)制構(gòu)
16、造函數(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);tempP=tempP-link;templateList& List:operator=(List& l)MakeEmpty();/先釋放原來(lái)鏈表的數(shù)據(jù)結(jié)點(diǎn)Node* tempP=l.head-link,*te
17、mpC;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.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=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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年新能源電池代加工合作協(xié)議書4篇
- 二零二五版壓力罐安裝工程風(fēng)險(xiǎn)評(píng)估與管理合同2篇
- 2025年度煤礦股權(quán)轉(zhuǎn)讓與新能源項(xiàng)目合作開發(fā)合同4篇
- 科學(xué)教育的新篇章小學(xué)生實(shí)踐操作的重要性
- 提升員工安全意識(shí)安全演習(xí)不可或缺
- 科學(xué)補(bǔ)充蛋白質(zhì)助力孕期媽媽健康成長(zhǎng)
- 2025年度二零二五版門面裝修工程環(huán)保驗(yàn)收合同范本文檔4篇
- 專利技術(shù)獨(dú)家轉(zhuǎn)讓合同 2024年版版
- 2025年環(huán)境衛(wèi)生設(shè)施建設(shè)與維護(hù)協(xié)議3篇
- 智能機(jī)器人與寵物健康管理的結(jié)合應(yīng)用研究
- 2025年安慶港華燃?xì)庀薰菊衅腹ぷ魅藛T14人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 人教版(2025新版)七年級(jí)下冊(cè)數(shù)學(xué)第七章 相交線與平行線 單元測(cè)試卷(含答案)
- GB/T 44351-2024退化林修復(fù)技術(shù)規(guī)程
- 從跨文化交際的角度解析中西方酒文化(合集5篇)xiexiebang.com
- 中藥飲片培訓(xùn)課件
- 醫(yī)院護(hù)理培訓(xùn)課件:《早產(chǎn)兒姿勢(shì)管理與擺位》
- 空氣自動(dòng)站儀器運(yùn)營(yíng)維護(hù)項(xiàng)目操作說(shuō)明以及簡(jiǎn)單故障處理
- 2022年12月Python-一級(jí)等級(jí)考試真題(附答案-解析)
- T-CHSA 020-2023 上頜骨缺損手術(shù)功能修復(fù)重建的專家共識(shí)
- Hypermesh lsdyna轉(zhuǎn)動(dòng)副連接課件完整版
- 小學(xué)六年級(jí)數(shù)學(xué)計(jì)算題100道(含答案)
評(píng)論
0/150
提交評(píng)論