習題七

一、名詞解釋

函數模板:一個帶類屬參數的函數;

類模板:一個帶類屬參數的類;

模板函數:通過參數實例化可以再構造出具體的函數;

模板類:通過參數實例化可以再構造出具體的類;


二、填空題

(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)設計一個類模板,然後將該類模板實例化爲整數型和字符觀類。利用類模板的成員函數爲其數據成員賦值,並顯示所賦給的值。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章