类模板:
概念:对功能相同数据类型不同,可以使用类模板。
目录
一、在声明类模板时要增加一行:
template<class 参数类型名>
类模板包含参数,因此称为参数化的类。
如果说类是对象的抽象,对象是类的实例。则类模板是类的抽象,类是类模板的实例。
例:
对两个整数进行比较,通过调用成员函数min和max得到两个整数中的大者和小者。
class Compare_int
{
public:
Compare_int (int a,int b)//定义构造函数
{x=a;y=b;}
int max()
{return(x>y)?x:y;}
int min()
{return(x<y)?x:y;}
private:
int x,y;
};
对两个浮点型进行比较,通过调用成员函数min和max得到两个整数中的大者和小者。
class Compare_int
{
public:
Compare_int (float a,float b)//定义构造函数
{x=a;y=b;}
float max()
{return(x>y)?x:y;}
float min()
{return(x<y)?x:y;}
private:
float x,y;
};
很明显就是改一下两者之间的数据类型而已。
使用类模板:
template<class numtype>
class 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;
};
只需要把数据类型改为numtype就行,其中numtype是任取的,只要不违法就行。
二、下面就是使用类模板:
形式为:
类模板名<实际类型名>对象名(参数表);
或
类模板名<实际类型名>对象名(实参表);
Compare<int>cmp(4,7);
三、那么在类外定义类模板:
template<class 虚拟类型参数>
函数类型 类模板名<虚拟类型参数>::成员函数名(函数形参表){......}
tempalte<class numtype>
numtype Compare<numtype>::max()
{return(x>y)?x:y;}
四、说明:
1、类模板的类型参数可以有一个或多个,每个类型前面都必须加class。
2、和使用类一样,使用类模板时要注意其作用域,只能在其有效作用域内用它定义对象。
3、类模板可以有层次,一个类模板可以作为基类,派生类派生处模板类。
五:对之前知识的回顾:
[表达式]?a:b;
含义:表达式为真,返回a;表达式为假,返回b。