>[info] # 函數模板
* C++提供了**函數模板(function template)**,用以解決函數體完全一樣,而函數類型和形參類型不一致的情況.
* 所謂函數模板,實際上是建立一個通用函數,其函數類型和形參類型不具體指定,用一個**虛擬類型**來代表,這個**通用函數**就稱為函數模板.
* 在調用函數時系統會根據實參的類型來取代模板中的**虛擬類型**,從而實現了不同函數的功能.
* 用函數模板比函數重載更方便,程序更簡潔.但應注意它**只適用**于函數的參數個數相同而類型不同,且函數體相同的情況,如果參數的個數不同,則不能用函數模板.
**定義函數模板的一般形式**
* template通用函數定義
* template 通用函數定義
* 類型參數可以不只一個, 根據需要確定個數. template
## **例子**
~~~
/* ***求兩個整數或3個整數中的最大數*** */
#include <iostream>
using namespace std;
template<typename T> //模板聲明,其中T為類型參數
T max(T a,T b,T c) //定義一個通用函數,用T作虛擬的類型名
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
int main( )
{
int i1=185,i2=-76,i3=567,i;
double d1=56.87,d2=90.23,d3=-3214.78,d;
long g1=67854,g2=-912456,g3=673456,g;
i=max(i1,i2,i3); //調用模板函數,此時T被int取代
d=max(d1,d2,d3); //調用模板函數,此時T被double取代
g=max(g1,g2,g3); //調用模板函數,此時T被long取代
cout<<”i_max=”<<i<<endl;
cout<<”d_max=”<<d<<endl;
cout<<”g_max=”<<g<<endl;
return 0;
}
~~~
- 介紹
- 編程設計語言
- 第一章 對C++的初步認識
- 1.2 最簡單的C++程序
- 1.3 C++對C的補充
- 1.3.1 return
- 1.3.2 輸入輸出流
- 1.3.3 putchar 和 getchar
- 1.3.4 用const定義常變量
- 1.3.5 函數原型聲明
- 1.3.6 內置函數
- 1.3.7 函數重載
- 1.3.8 函數模板
- 1.3.9 有默認值的參數
- 1.3.10 作用域
- 1.3.11 const修飾指針
- 1.3.12 引用
- 1.3.13 生命期
- 1.3.14 變量
- 1.3.15 字符串變量
- 第二章 類與對象
- 2.2 類的聲明和對象的定義
- 2.3 類的成員函數
- 第三章 關于類和對象的進一步討論
- 3.1 構造函數
- 3.1.1 對象的初始化
- 3.1.2 構造函數
- 3.2 析構函數
- 3.3調用析構函數和構造函數的順序
- 3.4 對象數組
- 3.5 對象指針
- 3.6 共享數據的保護
- 3.7 對象的建立與釋放
- 3.8 對象的賦值與復制
- 3.9 靜態成員
- 3.10 友元
- 3.11 類模板
- 第四章 運算符重載
- 數據類型轉換
- 運算符重載
- 重載流插入運算符和流提取運算符
- 第五章 繼承與派生
- 繼承與派生
- 第六章 多態性與虛函數
- 多態性
- 虛函數
- 純虛函數與抽象類