C++函數(shù)模板基本概念講述
C++編程語言中的模板應用對于程序開發(fā)是一個非常重要應用。其中,C++函數(shù)模板能以同樣的程序代碼對不同類型的數(shù)據(jù)進行處理,其關鍵是將所處理的數(shù)據(jù)類型說明為參數(shù),即類型參數(shù)化。
定義函數(shù)模板的一般形式是:
- template <class 類型參數(shù)名1 ,class 類型參數(shù)名 2,…>
- 函數(shù)返回值類型 函數(shù)名(形參表)
- {
- 函數(shù)體
- }
說明:
(1)這里的類型參數(shù)名就是代表形形色色數(shù)據(jù)類型的通用參數(shù)名,它可以代表基本數(shù)據(jù)類型,也可以代表類。
(2)編寫C++函數(shù)模板的方法是:
step 1:定義一個普通的函數(shù),數(shù)據(jù)類型采用具體的普通的數(shù)據(jù)類型,仍以打印數(shù)組為例,先定義一個打印整型數(shù)組的普通函數(shù):
- void printArray(int *array,int count)
- {
- for (int i=0;i<count;i++)
- cout<<array[i]<<" ";
- cout <<endl;
- }
step 2:將數(shù)據(jù)類型參數(shù)化:將其中具體的數(shù)據(jù)類型名(如 int )全部替換成由自己定義的抽象的類型參數(shù)名(如T)。
step 3:在函數(shù)頭前用關鍵字template引出對類型參數(shù)名的聲明。這樣就把一個具體的函數(shù)改造成一個通用的函數(shù)模板:
- template <class T>void printArray(T *array,int count)
- {
- for (int i=0;i<count;i++)
- cout<<array[i]<<" ";
- }
#t#(3)C++函數(shù)模板不是一個可以執(zhí)行的函數(shù),它只是對函數(shù)功能的程序描述,編譯程序不為它生成執(zhí)行代碼。
(4)當編譯程序遇到函數(shù)調用:
函數(shù)名 (實參表)時,自動將實參表中具體的數(shù)據(jù)類型替換函數(shù)模板中的類型參數(shù),生成一個隱含的重載函數(shù),該重載函數(shù)的程序代碼與函數(shù)模板相同,類型則采用實參表中的具體數(shù)據(jù)類型。仍以前面所創(chuàng)建的打印數(shù)組C++函數(shù)模板為例,當程序出現(xiàn)函數(shù)調用語句printArray(a,aCount);時,編譯程序將根據(jù)第一個實參a的數(shù)據(jù)類型int 匹配類型參數(shù)T,將函數(shù)模板中的所有T都替換成具體的數(shù)據(jù)類型int,從而產生一個具體的可執(zhí)行函數(shù)的定義(這個過程稱為模板實例化):
- void printArray(int *array,int count);