其主要就是针对不同的数据类型的工具(函数的编写更加的全面)
一、格式:
函数体:
template<class T>//形参不能为空 class和 typname 一样的效果。
T(函数返回值类型) sum(T a,T b);(T:实参类型)
{
return a+b;
}
调用部分:
int main () {
int i=5, j=6, k;
double f=2.0, g=0.5, h;
// k=sum<int>(i,j);
// h=sum<double>(f,g);
k = sum (i,j);
h = sum (f,g);//两种方式都可以
cout << k << '\n';
cout << h << '\n';
return 0;
}
二、注意
由于数据类型定死了,所以不支持类型转换
T Min(const T & t1, const T & t2){
return t1>t2 ? t1 : t2;
}
int main(){
cout<<Min(3,5)<<endl;
string s1("abc"),s2("def");
cout<<Min(s1,s2)<<endl;
// cout<<Min(3,5.0)<<endl; //error 不支持隐式类型转换
return 0;
}
ps::同时呢 这里的形参也不一定就是类
示例:#include<iostream>
using namespace std;
template <class T,size_t N>
void array_init(T (&parm)[N]){
for(size_t i=0;i<N;i++)
parm[i]=i;
}
int main(){
int a[10];
array_init(a);
for(int i=0;i<10;i++){
cout<<a[i];
}
}
三、模板类
重点就是各个成员函数之前要加上这里的模板声明
#include <iostream>
#include <string>
using namespace std;
template<typename T, int N>
class container;
template<typename T, int N>
void display(const container<T,N> &);
template<typename T, int N>
class container{
private:
T array[N];
public:
void init();
friend void display <>(const container<T,N> & c);
};
template<typename T, int N>
void container<T,N>::init(){
for(int i=0;i<N;i++)
cin>>array[i];
}
template<typename T, int N>
void display(const container<T,N> & c){
for(int i=0;i<N;i++)
cout<<c.array[i]<<" ";
cout<<endl;
}
int main(){
container<int,5> c;
c.init();
display(c);
container<string,5> s;
s.init();
display(s);
return 0;
}