版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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ù)一類(lèi)型的影響,并且可以自動(dòng)適應(yīng)數(shù)據(jù)類(lèi)型的變化。這種程序設(shè)計(jì)類(lèi)型稱(chēng)為參數(shù)化程序設(shè)計(jì)。模板是 C+支持參數(shù)化程序設(shè)計(jì)的工具,通過(guò)它可以實(shí)現(xiàn)參數(shù)化_多態(tài)性性。1.2函數(shù)模板的定義形式是template <模板參數(shù)表 > 返回類(lèi)型 函數(shù)名形式參數(shù)表。其中,<模板參數(shù)表 >中參數(shù)可以有_多_個(gè),用逗號(hào)分開(kāi)。模板參數(shù)主要是 _模板類(lèi)型 參C+規(guī)定參數(shù)。它代表一種類(lèi)型,由關(guān)鍵字_typename 或_class _后加一個(gè)標(biāo)識(shí)符構(gòu)成,標(biāo)識(shí)符代表一個(gè)潛在的內(nèi)置或用戶(hù)定義的類(lèi)
2、型參數(shù)。類(lèi)型參數(shù)由可以是任意合法標(biāo)識(shí)符 數(shù)名必須在函數(shù)定義中至少出現(xiàn)一次。1.3編譯器通過(guò)如下匹配規(guī)那么確定調(diào)用那一個(gè)函數(shù):首先,尋找最符合_函數(shù)名_和_參數(shù)類(lèi)型一的一般函數(shù),假設(shè)找到那么調(diào)用該函數(shù);否那么尋找一個(gè)_函數(shù)模板_,將其實(shí)例化成一個(gè)_模 板函數(shù)_,看是否匹配,如果匹配,就調(diào)用該_模板函數(shù)_;再那么,通過(guò) 類(lèi)型轉(zhuǎn)換 規(guī)那么 進(jìn)行參數(shù)的匹配。如果還沒(méi)有找到匹配的函數(shù)那么調(diào)用錯(cuò)誤。如果有多于一個(gè)函數(shù)匹配,那么調(diào)用產(chǎn)生_二義性_,也將產(chǎn)生錯(cuò)誤。1.4類(lèi)模板使用戶(hù)可以為類(lèi)聲明一種模式,使得類(lèi)中的某些數(shù)據(jù)成員、某些成員函數(shù)的參數(shù)、某些成員函數(shù)的返回值能取_任意類(lèi)型_ 包括_系統(tǒng)預(yù)定類(lèi)型_和_用
3、戶(hù)自定義 的類(lèi)型。類(lèi)是對(duì)一組對(duì)象的公共性質(zhì)的抽象,而類(lèi)模板那么是對(duì)不同類(lèi)的一數(shù)據(jù)類(lèi)型?_的抽象,因此類(lèi)模板是屬于更高層次的抽象。由于類(lèi)模板需要一種或多種一類(lèi)型一參數(shù),所以類(lèi)模板也常常 稱(chēng)為一參數(shù)化類(lèi)。2. 簡(jiǎn)答題2.1簡(jiǎn)述函數(shù)模板生成函數(shù)的過(guò)程。2.2簡(jiǎn)述類(lèi)模板生成對(duì)象的過(guò)程。2.3簡(jiǎn)述函數(shù)模板與模板函數(shù)、類(lèi)模板與模板類(lèi)的區(qū)別。3. 選擇題3.1關(guān)于函數(shù)模板,描述錯(cuò)誤的選項(xiàng)是A 。A函數(shù)模板必須由程序員實(shí)例化為可執(zhí)行的函數(shù)模板B. 函數(shù)模板的實(shí)例化由編譯器實(shí)現(xiàn)C. 一個(gè)類(lèi)定義中,只要有一個(gè)函數(shù)模板,那么這個(gè)類(lèi)是類(lèi)模板D?類(lèi)模板的成員函數(shù)都是函數(shù)模板,類(lèi)模板實(shí)例化后,成員函數(shù)也隨之實(shí)例化3.2以
4、下的模板說(shuō)明中,正確的選項(xiàng)是D 。A. templatevtype n ame T1,T2>B. templatevclass T1,T2>C. templatevclass T1,class T2>D. templatevtype name T1,type name T2>3.3函數(shù)模板定義如下:template <type n ame T>Max T a, T b ,T &c c=a+b; 以下選項(xiàng)正確的選項(xiàng)是B oMax (x, y, z);C.i nt x, y; float z;Max( x, y, z );D. float x; doub
5、le y, zMax( x, y, z); Max( x,y, z);3.4 以下有關(guān)模板的描述錯(cuò)誤的選項(xiàng)是 (D) 。A 模板把數(shù)據(jù)類(lèi)型作為一個(gè)設(shè)計(jì)參數(shù),稱(chēng)為參數(shù)化程序設(shè)計(jì)。B 使用時(shí),模板參數(shù)與函數(shù)參數(shù)相同,是按位置而不是名稱(chēng)對(duì)應(yīng)的C 模板參數(shù)表中可以有類(lèi)型參數(shù)和非類(lèi)型參數(shù)。D 類(lèi)模板與模板類(lèi)是同一個(gè)概念。3.5 類(lèi)模板的使用實(shí)際上是將類(lèi)模板實(shí)例化成一個(gè)A.函數(shù)B.對(duì)象3.6 類(lèi)模板的模板參數(shù) ( D) 。A.只能作為數(shù)據(jù)成員的類(lèi)型C.只可作為成員函數(shù)的參數(shù)類(lèi)型3.7 類(lèi)模板的實(shí)例化 ( A) 。A .在編譯時(shí)進(jìn)行C. 在運(yùn)行時(shí)進(jìn)行3.8 以下類(lèi)模板定義正確的為 ( A) 。A. temp
6、late<class T,int i=0> C . template<class T,typename T>4. 編程題4.1 設(shè)計(jì)一個(gè)函數(shù)模板,其中包括數(shù)據(jù)成員 模 板參數(shù) T 可實(shí)例化成字符串。#include <iostream>#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=
7、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<<endl;( C) 。C. 類(lèi)D. 抽象類(lèi)B.只可作為成員函數(shù)的返回類(lèi)型D .以上三種均可B. 屬于動(dòng)態(tài)聯(lián)編D. 在連接時(shí)進(jìn)行B. template<class T,class int i>D. template<class T1,T2>T an 以及對(duì)其進(jìn)行排序的成員函數(shù) sort( )
8、stringStr10="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);Sort<int>(Int,8);S
9、ort<double>(Dou,7);Print(Str,10);Print(Int,8);Print(Dou,7);return 0;int4.2 設(shè)計(jì)一個(gè)類(lèi)模板,其中包括數(shù)據(jù)成員T an 以及在其中進(jìn)行查找數(shù)據(jù)元素的函數(shù)search(T) 模板參數(shù) T 可實(shí)例化成字符串。#include <iostream>using namespace std;template<typename T,int n>class Aint size;T* element;public:A();A();int Search(T);void SetElement(int ind
10、ex,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)return i;return -1;template<
11、;typename T,int n>void A<T,n>:SetElement(int index,const T& value) elementindex=value;A<int,5> intAry; / 用 int 實(shí)例化,建立模板類(lèi)對(duì)象A<double,10> douAry;/ 用 double 實(shí)例化,建立模板類(lèi)對(duì)象int i;for(i=0;i<5;i+) intAry.SetElement(i,i+3);for(i=0;i<10;i+) douAry.SetElement(i,(i+i)*0.35);i=intAry.
12、Search(7);if(i>=0)cout<<i<<endl;i=douAry.Search(0.7);if(i>=0)cout<<i<<endl;return 0;4.3 設(shè)計(jì)一個(gè)單向鏈表類(lèi)模板,節(jié)點(diǎn)數(shù)據(jù)域中數(shù)據(jù)從小到大排列,并設(shè)計(jì)插入、刪除節(jié)點(diǎn)的 成員函 數(shù)。#include<iostream> using namespace std;template<typename T>class List; template<typename T>class Node/ 數(shù)據(jù)域/ 指針域T info;N
13、ode<T> *link; public:Node();構(gòu)造函數(shù)/ 生成頭結(jié)點(diǎn)的Node(const T & data);/Node<T>:Node()link=NULL;Node<T>:Node(const T & data)friend class List<T>template <typename T> template <typename T> info=data; link=NULL;生成一般結(jié)點(diǎn)的構(gòu)造函數(shù)/ 定義鏈表類(lèi)/ 鏈表頭指針和尾指針template<typename T>cl
14、ass List Node<T> *head;public:List();空鏈表 List();void MakeEmpty();Node<T>* Find(T data);void PrintList();/ 構(gòu)造函數(shù),生成頭結(jié)點(diǎn)/ 析構(gòu)函數(shù)/ 清空一個(gè)鏈表,只余表頭結(jié)點(diǎn)/ 搜索數(shù)據(jù)域與 data 相同的結(jié)點(diǎn),返回該結(jié)點(diǎn)的地址/ 打印鏈表的數(shù)據(jù)域; / 按升序生成鏈表*p)void InsertOrder(Node<T>Node<T>* CreatNode(T data);Node<T>* DeleteNode(Node<T&
15、gt;* p); / 創(chuàng)立一個(gè)結(jié)點(diǎn) 孤立結(jié)點(diǎn) 刪除指定結(jié)點(diǎn);template<typename T>List<T>:List() head=new Node<T>(-9999);/ 頭結(jié)點(diǎn),最小的數(shù)據(jù)從小到大插入template<typename T>List<T>:List()MakeEmpty();delete head;template<typename T>void List<T>:MakeEmpty()Node<T> *tempP; while(head->link!=NULL) t
16、empP=head->link; head->link=tempP->link; / 把頭結(jié)點(diǎn)后的第一個(gè)節(jié)點(diǎn)從鏈中脫離 delete tempP;/ 刪除 ( 釋放 ) 脫離下來(lái)的結(jié)點(diǎn)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é)點(diǎn)地址,不成功返回 NULL template<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>
18、 *tempP=head,*tempQ=head; /tempQ指向 tempP 前面的一個(gè)節(jié)點(diǎn)while(tempP!=NULL)if(p->info<tempP->info)break; / 找第一個(gè)比插入結(jié)點(diǎn)大的結(jié)點(diǎn),由 tempP 指向 tempQ=tempP;tempP=tempP->link;p->link=tempP; tempQ->link=p; template<typename T>Node<T>* List<T>:CreatNode(T data)/建立新節(jié)點(diǎn)Node<T>*tempP=n
19、ew Node<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 temp
20、C;int main()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<<" 請(qǐng)輸入一個(gè)要求刪除的整數(shù) "<<endl;cin>>j;P1=list1.Find(j);if(P1!=NULL)P1=list1.DeleteNode(P1);delete
21、P1;list1.PrintList();else cout<<" 未找到 "<<endl;cout<<" 請(qǐng)輸入一個(gè)要求插入的整數(shù) "<<endl; cin>>j;P1=list1.CreatNode(j); list1.InsertOrder(P1);list1.PrintList();list1.MakeEmpty();/ 清空 list1list1.PrintList();return 0;4.4 為單鏈表類(lèi)模板增加一個(gè)復(fù)制構(gòu)造函數(shù)和賦值運(yùn)算符 在 (=) 。 上題根底上, List 類(lèi)
22、增加一個(gè)復(fù)制構(gòu)造函數(shù)和賦值運(yùn)算符 (=) template<typename T>List<T>:List(List& l) head=newNode<T>(-9999);/ 現(xiàn)建立頭結(jié)點(diǎn) 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& l)MakeEmpty();/ 先釋放原來(lái)鏈表的數(shù)據(jù)結(jié)點(diǎn)Node<T>* tempP=l.head->link,*tempC; while(tempP!=NULL) tempC=CreatNode(tempP->info);InsertAfte
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高端會(huì)議策劃與銷(xiāo)售服務(wù)合同模板
- 2025年度某局?jǐn)?shù)字化轉(zhuǎn)型勞務(wù)分包結(jié)算規(guī)范合同2篇
- 2025版辦公樓小型裝飾裝修工程施工合同示范6篇
- 2025版建筑工地挖掘機(jī)駕駛員勞動(dòng)合同標(biāo)準(zhǔn)范本3篇
- 《全球化與兩岸關(guān)系》課件
- 可燃冰資源地質(zhì)評(píng)價(jià)方法與實(shí)踐考核試卷
- 2025版學(xué)校食堂蔬菜采購(gòu)及食品安全追溯服務(wù)合同3篇
- 2025年度美術(shù)品藝術(shù)品投資顧問(wèn)合同范本4篇
- 2025年學(xué)校節(jié)日慶祝協(xié)議
- 2025年合伙人員協(xié)議
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)上冊(cè) 期末綜合試卷(含答案)
- 收養(yǎng)能力評(píng)分表
- 山東省桓臺(tái)第一中學(xué)2024-2025學(xué)年高一上學(xué)期期中考試物理試卷(拓展部)(無(wú)答案)
- 中華人民共和國(guó)保守國(guó)家秘密法實(shí)施條例培訓(xùn)課件
- 管道坡口技術(shù)培訓(xùn)
- 2024年全國(guó)統(tǒng)一高考英語(yǔ)試卷(新課標(biāo)Ⅰ卷)含答案
- 2024年認(rèn)證行業(yè)法律法規(guī)及認(rèn)證基礎(chǔ)知識(shí) CCAA年度確認(rèn) 試題與答案
- 皮膚儲(chǔ)存新技術(shù)及臨床應(yīng)用
- 外研版七年級(jí)英語(yǔ)上冊(cè)《閱讀理解》專(zhuān)項(xiàng)練習(xí)題(含答案)
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)必考題
- 上海市復(fù)旦大學(xué)附中2024屆高考沖刺模擬數(shù)學(xué)試題含解析
評(píng)論
0/150
提交評(píng)論