




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上1.概念填空題1.1 C+最重要的特性之一就是代碼重用,為了實現(xiàn)代碼重用,代碼必須具有 通用性 。通用代碼需要不受數(shù)據(jù) 類型 的影響,并且可以自動適應(yīng)數(shù)據(jù)類型的變化。這種程序設(shè)計類型稱為 參數(shù)化 程序設(shè)計。模板是C+支持參數(shù)化程序設(shè)計的工具,通過它可以實現(xiàn)參數(shù)化 多態(tài)性 性。1.2函數(shù)模板的定義形式是template <模板參數(shù)表> 返回類型 函數(shù)名(形式參數(shù)表)。其中,<模板參數(shù)表>中參數(shù)可以有 多 個,用逗號分開。模板參數(shù)主要是 模板類型 參數(shù)。它代表一種類型,由關(guān)鍵字 typename 或 class 后加一個標識符構(gòu)成,標識符代表一個潛
2、在的內(nèi)置或用戶定義的類型參數(shù)。類型參數(shù)由可以是任意合法標識符。C+規(guī)定參數(shù)名必須在函數(shù)定義中至少出現(xiàn)一次。1.3編譯器通過如下匹配規(guī)則確定調(diào)用那一個函數(shù):首先,尋找最符合 函數(shù)名 和 參數(shù)類型 的一般函數(shù),若找到則調(diào)用該函數(shù);否則尋找一個 函數(shù)模板 ,將其實例化成一個 模板函數(shù) ,看是否匹配,如果匹配,就調(diào)用該 模板函數(shù) ;再則,通過 類型轉(zhuǎn)換 規(guī)則進行參數(shù)的匹配。如果還沒有找到匹配的函數(shù)則調(diào)用錯誤。如果有多于一個函數(shù)匹配,則調(diào)用產(chǎn)生 二義性 ,也將產(chǎn)生錯誤。1.4類模板使用戶可以為類聲明一種模式,使得類中的某些數(shù)據(jù)成員、某些成員函數(shù)的參數(shù)、某些成員函數(shù)的返回值能取 任意類型 (包括 系統(tǒng)預(yù)定
3、類型 和 用戶自定義的類型)。類是對一組對象的公共性質(zhì)的抽象,而類模板則是對不同類的 數(shù)據(jù)類型? 的抽象,因此類模板是屬于更高層次的抽象。由于類模板需要一種或多種 類型 參數(shù),所以類模板也常常稱為 參數(shù)化類 。2. 簡答題2.1簡述函數(shù)模板生成函數(shù)的過程。2.2 簡述類模板生成對象的過程。2.3 簡述函數(shù)模板與模板函數(shù)、類模板與模板類的區(qū)別。3. 選擇題3.1關(guān)于函數(shù)模板,描述錯誤的是(A )。 A.函數(shù)模板必須由程序員實例化為可執(zhí)行的函數(shù)模板 B.函數(shù)模板的實例化由編譯器實現(xiàn)C.一個類定義中,只要有一個函數(shù)模板,則這個類是類模板D.類模板的成員函數(shù)都是函數(shù)模板,類模板實例化后,成員函數(shù)也隨之
4、實例化3.2下列的模板說明中,正確的是(D )。 A.template<typename T1,T2> B.template<class T1,T2> C.template<class T1,class T2> D.template<typename T1,typename T2>3.3 函數(shù)模板定義如下: template <typename T> Max( T a, T b ,T &c)c=a+b;下列選項正確的是(B )。 A. int x, y; char z; B.double x, y, z; Max(x, y,
5、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)模板的描述錯誤的是(D)。A 模板把數(shù)據(jù)類型作為一個設(shè)計參數(shù),稱為參數(shù)化程序設(shè)計。B 使用時,模板參數(shù)與函數(shù)參數(shù)相同,是按位置而不是名稱對應(yīng)的。C 模板參數(shù)表中可以有類型參數(shù)和非類型參數(shù)。D 類模板與模板類是同一個概念。3.5類模板的使用實際上是將類模板實例化成一個(C)。A函數(shù) B對象 C類 D抽象類3.6類模板的模板參數(shù)(D)。 A只能作為數(shù)據(jù)成員的類型 B只可作為成員函數(shù)的返回類型C只可作為
6、成員函數(shù)的參數(shù)類型 D以上三種均可3.7類模板的實例化(A)。 A在編譯時進行 B屬于動態(tài)聯(lián)編C在運行時進行 D在連接時進行3.8以下類模板定義正確的為(A)。Atemplate<class T,int i=0> Btemplate<class T,class int i>Ctemplate<class T,typename T> Dtemplate<class T1,T2>4編程題4.1設(shè)計一個函數(shù)模板,其中包括數(shù)據(jù)成員T an以及對其進行排序的成員函數(shù) sort( ),模板參數(shù)T可實例化成字符串。#include <iostream&g
7、t;#include <string>using namespace std;template<typename T>void Sort(T* a,int n)int i,j;T t;for(i=0;i<n-1;i+) for(j=0;j<n-i-1;j+) if (aj>aj+1) t=aj; aj=aj+1; aj+1=t; template<typename T>void Print(T* a,int n)int i;for(i=0;i<n;i+)cout<<ai<<" "cout&l
8、t;<endl;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<string>(Str,10);So
9、rt<int>(Int,8);Sort<double>(Dou,7);Print(Str,10);Print(Int,8);Print(Dou,7);return 0;4.2設(shè)計一個類模板,其中包括數(shù)據(jù)成員T an以及在其中進行查找數(shù)據(jù)元素的函數(shù)int search(T)模板參數(shù) T可實例化成字符串。#include <iostream>using namespace std; template<typename T,int n>class A int size; T* element;public: A(); A(); int Search(T
10、); void SetElement(int index,const T& value);template<typename T,int n>A<T,n>:A()size=n>1? n:1; element=new Tsize;template<typename T,int n>A<T,n>:A() delete element;template<typename T,int n>int A<T,n>:Search(T t)int i;for(i=0;i<size;i+)if(elementi=t)re
11、turn i;return -1;template<typename T,int n>void A<T,n>:SetElement(int index,const T& value) elementindex=value;int main()A<int,5> intAry;/用int實例化,建立模板類對象A<double,10> douAry;/用double實例化,建立模板類對象int i;for(i=0;i<5;i+) intAry.SetElement(i,i+3);for(i=0;i<10;i+) douAry.Set
12、Element(i,(i+i)*0.35);i=intAry.Search(7);if(i>=0)cout<<i<<endl;i=douAry.Search(0.7);if(i>=0)cout<<i<<endl;return 0;4.3設(shè)計一個單向鏈表類模板,節(jié)點數(shù)據(jù)域中數(shù)據(jù)從小到大排列,并設(shè)計插入、刪除節(jié)點的成員函數(shù)。#include<iostream>using namespace std;template<typename T>class List;template<typename T>cl
13、ass NodeT info; /數(shù)據(jù)域Node<T> *link; /指針域public:Node(); /生成頭結(jié)點的構(gòu)造函數(shù)Node(const T & data);/生成一般結(jié)點的構(gòu)造函數(shù)friend class List<T>template <typename T> Node<T>:Node()link=NULL;template <typename T> Node<T>:Node(const T & data)info=data;link=NULL;/定義鏈表類template<type
14、name T>class ListNode<T> *head; /鏈表頭指針和尾指針public:List(); /構(gòu)造函數(shù),生成頭結(jié)點(空鏈表)List(); /析構(gòu)函數(shù)void MakeEmpty(); /清空一個鏈表,只余表頭結(jié)點Node<T>* Find(T data); /搜索數(shù)據(jù)域與data相同的結(jié)點,返回該結(jié)點的地址void PrintList(); /打印鏈表的數(shù)據(jù)域void InsertOrder(Node<T> *p); /按升序生成鏈表Node<T>* CreatNode(T data); /創(chuàng)建一個結(jié)點(孤立結(jié)點)N
15、ode<T>* DeleteNode(Node<T>* p); /刪除指定結(jié)點;template<typename T>List<T>:List()head=new Node<T>(-9999);/頭結(jié)點,最小的數(shù)據(jù)從小到大插入template<typename T>List<T>:List()MakeEmpty();delete head;template<typename T>void List<T>:MakeEmpty()Node<T> *tempP;while(hea
16、d->link!=NULL)tempP=head->link;head->link=tempP->link; /把頭結(jié)點后的第一個節(jié)點從鏈中脫離delete tempP; /刪除(釋放)脫離下來的結(jié)點template<typename T> Node<T>* List<T>:Find(T data)Node<T> *tempP=head->link;while(tempP!=NULL && tempP->info!=data) tempP=tempP->link;return tempP;
17、 /搜索成功返回該結(jié)點地址,不成功返回NULLtemplate<typename T>void List<T>:PrintList()Node<T>* tempP=head->link;while(tempP!=NULL)cout<<tempP->info<<'t'tempP=tempP->link;cout<<endl;template<typename T>void List<T>:InsertOrder(Node<T> *p)Node<T&g
18、t; *tempP=head,*tempQ=head; /tempQ指向tempP前面的一個節(jié)點while(tempP!=NULL)if(p->info<tempP->info)break; /找第一個比插入結(jié)點大的結(jié)點,由tempP指向tempQ=tempP;tempP=tempP->link;p->link=tempP;tempQ->link=p;template<typename T>Node<T>* List<T>:CreatNode(T data)/建立新節(jié)點Node<T>*tempP=new Nod
19、e<T>(data);return tempP;template<typename T>Node<T>* List<T>:DeleteNode(Node<T>* p)Node<T>* 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 mai
20、n()Node<int> * P1;List<int> list1;int a10=20,12,0,-5,9,-18,6,11,5,3,i,j;for(i=0;i<10;i+)P1=list1.CreatNode(ai);list1.InsertOrder(P1);list1.PrintList();cout<<"請輸入一個要求刪除的整數(shù)"<<endl;cin>>j;P1=list1.Find(j);if(P1!=NULL)P1=list1.DeleteNode(P1);delete P1;list1.Pri
21、ntList();else cout<<"未找到"<<endl;cout<<"請輸入一個要求插入的整數(shù)"<<endl;cin>>j;P1=list1.CreatNode(j);list1.InsertOrder(P1);list1.PrintList();list1.MakeEmpty();/清空list1list1.PrintList();return 0;4.4 為單鏈表類模板增加一個復(fù)制構(gòu)造函數(shù)和賦值運算符(=)。在上題基礎(chǔ)上,List類增加一個復(fù)制構(gòu)造函數(shù)和賦值運算符(=)templat
22、e<typename T>List<T>:List(List& l)head=new Node<T>(-9999);/現(xiàn)建立頭結(jié)點Node<T>* tempP=l.head->link,*tempC;while(tempP!=NULL)tempC=CreatNode(tempP->info);InsertAfter(tempC);tempP=tempP->link;template<typename T>List<T>& List<T>:operator=(List&
23、l)MakeEmpty();/先釋放原來鏈表的數(shù)據(jù)結(jié)點Node<T>* tempP=l.head->link,*tempC;while(tempP!=NULL)tempC=CreatNode(tempP->info);InsertAfter(tempC);tempP=tempP->link;return *this;int main()Node<int> * P1;List<int> list1,list2;int a10=20,12,0,-5,9,-18,6,11,5,3,i,j;for(i=0;i<10;i+)P1=list1.CreatNode(ai
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度冰淇淋品牌代理經(jīng)營數(shù)據(jù)監(jiān)測與分析合同
- 2025年度高科技農(nóng)業(yè)項目墊資合同樣本
- 2025年度純凈水電商平臺運營合作協(xié)議范本
- 2025年度網(wǎng)絡(luò)安全風險評估與整改合同
- 醫(yī)院文化建設(shè)宣傳與落實方案計劃
- 小班社會性技能培養(yǎng)計劃
- 完美家庭學(xué)期班級家庭教育計劃
- 優(yōu)化項目周期管理的工作總結(jié)計劃
- 制定多層次績效激勵方案計劃
- 2025年金屬制衛(wèi)生、烹飪、餐飲器具項目建議書
- 跨境電商B2B數(shù)據(jù)運營高職PPT全套完整教學(xué)課件
- 鎖骨遠端骨折伴肩鎖關(guān)節(jié)脫位的治療
- 2023年中國煤化工行業(yè)全景圖譜
- 小學(xué)美術(shù) 四年級 人教版《造型?表現(xiàn)-色彩表現(xiàn)與創(chuàng)作》“色彩”單元美術(shù)作業(yè)設(shè)計《色彩的明與暗》《色彩的漸變》《色彩的情感》
- 2015年新版《中華人民共和國職業(yè)分類大典》
- 中國心臟重癥鎮(zhèn)靜鎮(zhèn)痛專家共識專家講座
- 企業(yè)生產(chǎn)制造部門預(yù)算編制模板
- 新概念英語第二冊單詞默寫表
- 教育心理學(xué)智慧樹知到答案章節(jié)測試2023年浙江師范大學(xué)
- 川教版七年級生命生態(tài)安全下冊第1課《森林草原火災(zāi)的危害》教案
- 食品檢驗檢測機構(gòu)能力建設(shè)計劃方案
評論
0/150
提交評論