这里写自定义目录标题
template学习笔记
需求
需要定义实现不同类型数据值比较并返回两个值中较大值的类,比如要分别比较int 和 float类型,不使用模板类temlplate时,需要定义两个类,分别进行int、float比较,代码如下:
class Compare_int
{
public :
Compare( int a, int b): x(a), y(b) {}
int max( ) { return (x>y)?x:y;}
private:
int x;
int y;
}
class Compare_float
{
public :
Compare( float a, float b): x(a), y(b){}
float max( ) { return (x>y)?x:y;}
private :
float x;
float y;
}
为了尽可能实现代码复用和简化代码量,就需要使用到模板类。定义格式如下:
格式定义:
template < class 类型参数名>
class 类名
{
...类内部变量函数定义...
}
上述需求以模板类定义实现代码如下:
示例:
template < class numtype> //声明一个模板,虚拟类型名为numtype
class Compare //类模板名为Compare
{
public :
Compare(numtype a,numtype b)
{x=a;y=b;}
numtype max( )
{ return (x>y)?x:y;}
numtype min( )
{ return (x<y)?x:y;}
private :
numtype x,y;
};
解析
上述示例定义一个模板类Compare,在建立对应模板类Compare对象时,根据模板类输入numtype类型,完成类Compare的初始化。如果将numtype类型指定为int型,编译系统就会用int取代所有的numtype,如果指定为float型,就用float取代所有的numtype。这样就能实现“一类多用”。
类对象定义
需要注意的是在定义类对象时,用使用模板类定义对象固定格式:
对比普通类定义
Compare_int cmp1(4,7); // Compare_int是已声明的类
需要在模板类名Compare后加**< 输入类型名>**
Compare <int> cmp(4,7);