一、名詞解釋
函數模板:一個帶類屬參數的函數;
類模板:一個帶類屬參數的類;
模板函數:通過參數實例化可以再構造出具體的函數;
模板類:通過參數實例化可以再構造出具體的類;
二、填空題
(1)C++支持兩種模板,一種是 函數模板 ,另一種是 類模板 。
(2)關鍵字 template 是定義模板的關鍵字。
(3)<模板參數表>中包含一個或多個用逗號分開的模板參數項,每項由保留字 class 或者 typename 開始。
(4)重載函數模板便於定義 類屬參數 或者函數參數的類型、個數不相同所進行的 類似 操作。
(5)函數模板實例化時, 沒有 普通傳值參數的類型轉換機制。
(6)STL 提供的容器是常用數據結構 的 類模板 。
(7)STL 容器類庫中包含7種基本容器。它們可以分成兩個組: 順序容器 和 關聯容器 。
(8)STL 迭代器主要包括5中基本類別: 輸入迭代器 、輸出迭代器 、 前向迭代器 、雙向迭代器 和 後向迭代器 。
(1)關於函數模板,描述錯誤的是( A )
A.函數模板必須由程序員實例化爲可執行的模板函數
B.函數模板的實例化由編輯器實現
C.一個類定義中,只要有一個函數模板,則這個類是類模板
D.類模板的成員雨數都是函數模板,類模板實例化後,成員函數也隨之實例化
(2)下列的模板說明中,正確的是( A )
A. template <typename T1,typename T2> B. template <class T1,T2>
C. template(classT1,classT2) D. template (typenameT1, T2)
(3)假設有函數模板定如下:
template Ctypename TS
Nax(T a.T b.T Sc)
{c=a+ b;}
下列選項正確的是( A B )
A. float x,y;float z; B. int x,y,z; C. int x,y;float z; D.flat x;double y,z;
Max(x,y,z); Max(x,y,z); Max(x,y,z); Max(x,y,z);
(4)建立類模板對象的實例化過程爲( C )。
A.基類——派生類 B.構造函數——對象
C.模板類——對象 D.模板類——模板函數
(5)下面( A B D )是標準模板庫中的主要組件。
A.容器 B.迭代器 C.文件 D.算法
四、判斷題
(1)一個模板函數能夠被相同函數名的另外模板函數重載。 (對)
(2)作爲模板類型參數的關鍵字class,特別含義是“任何用戶定義類的類型”。 (錯)
(3)在類模板的<模板參數表>中,必須至少有一個類參數。 (對)
(4)在類模板的<模板參數表>中,可以使用函數類型參數,該參數與普通函數參數的用法和功效完全相同。 (錯)
(5)迭代器就是我們平時所用的指針。 (錯)
(1)用函數模板實現求整數實數平方根的程序。
#include <stdio.h>
#include <math.h>
double mysqrt(int x)
{
return sqrt(x);
double lb = 0, rb = x;
for(int i = 0; i < 100; ++i)
{
double mid = lb + (rb - lb) / 2;
if(mid * mid < x) lb = mid;
else rb = mid;
}
return lb;
}
int main()
{
printf("%lf\n", mysqrt(5));
return 0;
}
結果如下:
(2)設計一個類模板,然後將該類模板實例化爲整數型和字符觀類。利用類模板的成員函數爲其數據成員賦值,並顯示所賦給的值。