template <class T> or template <typename T> //模板聲明格式
返回值類型 函數名(模板形參表)
{
函數體
}
函數調用:
函數名(模板實參表) //和普通的函數調用沒有區別,只不過運行時,系統會首先根據參數類型確定數據類型,生成一個模板函數</span>
下面介紹一個使用函數模板的實例
template <typename T>
T square(T x)// template 語句 和 函數模板定義語句不允許有別的語句
{
T result;
result = x * x;
return result;
};
void main()
{
int i, ii;
float x, xx;
double y, yy;
i = 2;
x = 2.2;
y = 2.2;
ii = square<int>(i);
cout << i << ": " << ii << endl;
xx = square<float>(x);
cout << x << ": " << xx << endl;
yy = square<double>(y);// 顯式使用模板
cout << y << ": " << yy << endl;
yy = square(y);//隱式使用模板
cout << y << ": " << yy << endl;
return ;
}
注意:
template <class T,class D>
T max(T a,D b)
{
return (a>b)?a:b;
}
void main()
{
float a = 4.5;
int b = 100;
cout<<max(100,154.5)<<endl;
cout<<max(154.5,100)<<endl;
}
2)重載一個函數模板:定義一個模板後,再定義一個重載函數template <class T>
T maxim(T a,T b)
{
return (a>b)?a:b;
}
int maxim(int a ,int b)
{
return (a>b)?a:b;
}//用戶自己定義一個同名函數
void main()
{
int m,n;
m = 10;
n = 20;
char a = 'a',b = 'b';
char s[10];
cout<< maxim(m,n)<<endl;//調用函數 實參和函數的參數類型完全一致,直接調用函數
cout<<maxim(a,b)<<endl;//調用模板 實參和函數參數類型不同,直接調用模板
cout<<maxim(m,a)<<endl;//調用函數 實參的類型不同,模板不適合,則再次調用函數
cout<<maxim(m,s)<<endl;//報錯-函數也不適合,直接報錯
}
上面調用函數的順序是,先調用函數-其次調用模板函數-再次調用函數。最後如果都不能調用,就直接報錯