一. 選擇題
1. 下列關於類模板中模板引數的敘述中,錯誤的是(d)
a.模板引數可以作為資料成員的型別
b.模板引數可以作為成員函式的返回型別
c.模板引數可以作為成員函式的引數型別
d.模板引數不能作為成員函式的區域性變數型別
2. 假設定義如下函式模板:
template
t max(t x,t y)
並定義了int i=3;char c=『a』;語句,正確的呼叫語句是:(d)
a.max(「li」, 」zhang」);
b. max(int(i), c);
c. max(i, c);
d. max(c, i);
3. 下列程式段中有錯的是(b)
template //a
int ib
myfunc(type1 x,type2 yc
;,下面(d)是錯誤的
a. vector>ivec;
b. vectorivec=;
c. vectorivec(ia,ia+7);
d. vectorsvec=ivec;
7.乙個(c )允許使用者為類定義一種模式,使得類中的某些資料成員及某些成員函式的返回值能去任意型別。
a.函式模板 b.模板函式 c. 類模板 d.模板類
二. 問答題
1.簡述函式模板與模板函式、類模板與模板類的區別。
答:函式模板就是實現資料型別引數化的函式定義,得到乙個函式族。當函式中的資料成員、函式的返回值型別需要用未知型別進行抽象時,就需要定義函式模板,而模板函式是指在函式模板中需要使用函式時,用實際資料型別對型別引數自動例項化得到;函式模板是模板的定義,定義中用到通用型別引數,它代表的是一類函式。
而模板函式是實實在在的函式定義,它在編譯系統遇到具體的函式呼叫時生成並具有**,用來表示某乙個具體函式。
類模板如同函式模板一樣,就是實現資料型別引數化的類定義,得到乙個類族。在需要定義物件時,首先顯式地將類模板中的型別引數例項化得到乙個具體的類,這就是模板類。類模板與模板類之間是抽象與具體的關係,類模板是諸多擁有相同資料成員和成員函式的類在型別上加以抽象得到的類族,而模板類是類模板中的型別引數例項化以後得到的乙個具體的類。
2.(選作題)陣列和向量的主要區別是什麼?
答:(1)宣告方式不同。(2)向量可以使用賦值運算子、比較運算子。
(3)可以用size()來測試向量中的元素個數。(4)向量可以用at()進行有效索引測試,無合法元素則丟擲異常。
3.(選作題)關聯容器有哪四種?簡單介紹它們是怎樣組成的?各有什麼特點?
答:四個關聯容器為:集合(set),多重集合(multiset),對映(map)和多重對映(multimap)。
集合和多重集合類提供了控制數值集合的操作,其中數值是關鍵字,即不必另有一組值與每個關鍵字相關聯。集合與多重集合類的主要差別在於多重集合允許重複的關鍵字(key),而集合不允許重複的關鍵字。集合和多重集合通常實現為紅黑二叉排序樹。
元素的順序由比較器函式物件(***parator function object)確定。如對整型multiset,只要用比較器函式物件less排序關鍵字,元素即可按公升序排列。
對映和多重對映類提供了操作與關鍵字相關聯的對映值(mapped value)的方法。對映和多重對映的主要差別在於多重對映允許存放與對映值相關聯的重複關鍵字,而對映只允許存放與對映值一一對應的單一關鍵字。
多重集合關聯容器用於快速儲存和讀取關鍵字。多重對映和對映關聯容器類用於快速儲存和讀取關鍵字與相關值(關鍵字/數值對,key/value pair)。
4.函式模板與同名的非模板函式過載時,呼叫的順序是怎樣的?
答:c++中,函式模板與同名的非模板函式過載時,呼叫的順序如下:
⑴ 找乙個引數完全匹配的函式,若有就呼叫它;
⑵ 找乙個函式模板,例項化為模板函式,若有就呼叫它;
⑶ 若(1)、(2)失敗,再找低一級的對函式過載的函式(隱式型別轉換等),若有就呼叫它;
⑷ 若(1)(2)(3)都未有,則出錯。
三.讀程式按要求作答
1.寫出下面程式的執行結果,分析注釋部分的原因。
#include
template
class sample
void operator++();
void disp();
template
void sample::operator++()
void main()
解:本題說明類模板的使用方法。sample是乙個類模板,由它產生模板類sample,通過建構函式給n賦初值,通過過載++運算子使n增1,這裡n由'a'增1變成'b'。
所以輸出為:n=b
2.請將程式補充完整,使輸出結果為:
a 陣列最大值:9
b 陣列最大值:9.2
要求:將求最大值的函式設計成函式模板。
本題程式如下:
#include
_______(1
_______(2
void main()
; double b=;
cout<<"a陣列最大值:" 解: (1) 填寫:template (2) 填寫:t max(t x,int n) 3.程式的輸出結果已給出,請將程式補充完整,完成類模板成員函式的定義,使得 程式輸出結果為: s1與s2的資料成員相等 s3與s4的資料成員不相等 press any key to continue 已給程式為: #include #include using namespace std; _______(1 class sample int operator==(sample); //相等運算子「==」過載函式 };template int sample::operator==(sample s) int main() 解:(1) 填寫:template (2) 填寫:return 1; 4.(選作題)寫出程式的執行結果,並分析原因。 #include #include using namespace std; int main() 四.程式設計題 1.編寫乙個使用類模板對陣列進行排序、查詢和求元素和的程式。 提示:設計乙個類模板templateclass array,用於對t型別的陣列進行排序、查詢和求元素和,然後由此產生模板類array和array。 在主函式中,輸入一些資料對其進行測試。 已知類定義、main()函式和執行結果如下: #include #include template class array //建構函式 ~array(){} void sort(); // 排序 int seek(t key); // 查詢指定的元素 t sum(); // 求和 void disp(); // 顯示所有的元素 }; void main(){ 1.偶數 整數中,能夠被2整除的數,叫做偶數。偶數包括正偶數 又稱雙數 負偶數和0。2.奇數 不能被2整除的整數叫奇數,也叫單數,如1 3 5 7 9 當把奇數分成若干個2時,最後不能分盡,總是要剩下乙個1,如5分成兩個2後剩1,9分成4個2後剩1。奇數加1或減1就變成偶數 雙數 數中,能被2整除的... 1 軟體測試的過程中需要哪三類輸出?答 1 軟體配置。主要包括軟體需求規格說明書 軟體設計規格說明 源程式 等。2 測試配置。主要包括軟體測試計畫 測試方案和測試用例等。3 測試工具。為了提高軟體測試質量及效率,減少測試過程中的手工勞動,可使用的一些專門的測試工具,如測試資料自動生成測試結果分析程式... 主要內容 1.內部控制的目標 原則與要素2.企業層面控制3.業務層面控制4.內部控制評價5.內部控制審計 考點一 內部控制的目標 原則與要素 1.內部控制的目標是合理保證企業經營管理合法合規 資產安全 財務報告及相關資訊真實完整,提高經營效率和效果,促進企業實現發展戰略。2.內部控制原則包括全面性原...第七章重點內容
第七章作業 2
第七章企業內部控