函数模板
template <class 类型形式参数>
函数返回类型 函数名(形势参数表)
{
//函数体
}
函数模板定义模板函数举例:
template <class T,class T1>//函数模板定义举例
void swap(T &a,T1 &b)
{
T1 temp;
temp=a;
a=b;
b=temp;
}
void main()
{
int a=8;
float b=9.8;
swap(a,b);
std::cout<<"a="<<a<<" b="<<b<<std::endl;
}
结果为a=9 b=8;
类模板:
template <class 形式参数表>
class 类名
{
//类体
}
类模板成员函数内定义与一般的类的成员函数定义方法一样,外定义需采用下面的形式:
template <class 形式参数表>
返回类型 类名<类型名表>::成员函数名(形式参数表)
{
//定义成员函数体;
}
类模板实例化举例:
template <class T1 ,class T2>
class Myclass{
public:
Myclass(T1 xx,T2 yy);//外部构造函数定义声明
void print()
{
std::cout<<"x="<<x<<"y="<<y<<std::endl;
}
private:
T1 x;
T2 y;
};
template<class T1,class T2>
Myclass<T1,T2>::Myclass(T1 xx, T2 yy)
{
this->x=xx;
this->y=yy;
}
void main()
{
Myclass<int ,char> obj(8,'d');
//Myclass<int ,char>为模板类,为一个类模板的实例化,
接收int 和char的数据类型
obj.print();
}
类模板和模板类的区别:
类模板是模板的定义,不是一个实实在在的类,定义中用到通用的类型参数;而模板类是实实在在的类,是类模板的实例化,类定义中通用的类型参数被实际类型所代替,对象属于一个模板类,但是不属于一个类模板。