程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第16章 模板與泛型編程(1)

第16章 模板與泛型編程(1)

編輯:C++入門知識

所謂泛型編程就是以獨立於任何特定類型的方式編寫代碼。模板是泛型編程的基礎。模板是創建類或函數的藍圖或公式。

面向對象編程所依賴的多態性稱為運行時多態性,泛型編程所依賴的多態性稱為編譯時多態性或參數式多態性。

16.1 模板定義

我們可以不用為每個類型定義一個新函數,而是只定義一個函數模板(function template)。函數模板是一個獨立於類型的函數,可作為一種方式,產生函數的特定類型版本。

template <typename T> 
int compare(const T &v1, const T &v2){ 
    if(v1<v2)  
        return -1; 
    else if(v2<v1)  
        return 1; 
    else 
        return 0; 

template <typename T>
int compare(const T &v1, const T &v2){
 if(v1<v2)
  return -1;
 else if(v2<v1)
  return 1;
 else
  return 0;
}模板定義以關鍵字template開始,後接模板形參表(template parameter list),模板形參表是用尖括號住的一個或多個模板形參(template parameter)的列表,形參之間以逗號分隔。

模板形參表不能為空。

1.模板形參表

模板形參表很像函數形參表,函數形參表定義了特定類型的局部變量但並不初始化那些變量,在運行時再提供實參來初始化形參。

同樣,模板形參表示可以在類或函數的定義中使用的類型或值。在函數內部,可以使用名字T引用一個類型,T表示哪個實際類型由編譯器根據所用的函數而確定。

2. 使用函數模板

使用函數模板時,編譯器會推斷哪個(或哪些)模板實參(template argument)綁定到模板形參。一旦編譯器確定了實際的模板實參,就稱它實例化(instantiate)了函數模板的一個實例。

cout <<compare("10","20")<<endl; 
 cout <<compare("10","20")<<endl;3. inline函數模板

函數模板可以用與非模板函數一樣的方式聲明為inline。說明符放在模板形參表之後,返回類型之前,不能放在關鍵字template之前。

template <typename T> inline 
const T &the_min(const T &v1, const T &v2){ 
        if(compare(v1, v2)==-1) 
            return v1; 
        else 
            return v2; 

template <typename T> inline
const T &the_min(const T &v1, const T &v2){
  if(compare(v1, v2)==-1)
   return v1;
  else
   return v2;
}cout<<the_min(10,29)<<endl; 

 摘自 xufei96的專欄
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved