² 模板是实现代码重用机制的一种工具,实质就是实现类型参数化,即把类型定义为参数。
²C++提供两种模板:函数模板,类模板
函数模版与类模版:函数模版就是建立一个通用的函数,其函数返回的类型与形参类型不具体指定,而是用虚拟的类型来代表。类模版就是建立一个通用的类,其数据成员的类型、成员函数的返回和参数类型都可以不具体指定,而是用虚拟的类型代表
²
²我们先来看一个最大值的函数
²函数模板就是建立一个通用的函数,其函数返回类型和形参类型不具体指定,而是用虚拟的类型来代表。
²凡是函数体相同的函数都可以用函数模板来代替,不必定义多个函数,只需在模板中定义一次即可。
²在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能
int max(int a,int b)
{
return a > b ? a : b;
}
char max(char a,char b)
{
return a > b ? a : b;
}
float max(float a,float b)
{
return a > b ? a : b;
}
template<typename T> //或者 template<class T>
T max(T a, T b)
{
return a>b? a:b;
}
void main()
{
int iMax = max(3,5); //调用int max(int a, int b);
char chMax = max('w','d'); //调用char max(char a, char b);
float fMax = max(2.7f, 1.3f); //调用float max(float a, float b);
}
²我们先来看一下下面这个类,求最大值的类
²和函数模板一样,类模板就是建立一个通用类,其数据成员的类型、成员函数的返回类型和参数类形都可以不具体指定,而用虚拟的类型来代表。
²当使用类模板建立对象时,系统会根据实参的类型取代类模板中的虚拟类型,从而实现不同类的功能
class CMax
{
public:
CMax(int a, int b)
{
m_a = a;
m_b = b;
}
int GetMax()
{
return m_a>m_b? m_a:m_b;
}
private:
int m_a;
int m_b;
}
template<typename T> //或者 template<class T>
class CMax
{
public:
CMax(T a, T b)
{
m_a = a;
m_b = b;
}
T GetMax()
{
return m_a>m_b? m_a:m_b;
}
private:
T m_a;
T m_b;
};
void main()
{
CMax<int> maxInt(3,5); //需要指定类型
int iMax = maxInt.GetMax();
CMax<char> maxChar('w','d');
char chMax = maxChar.GetMax();
CMax<float> maxFloat(2.7f,1.3f);
float fMax = maxFloat.GetMax();
}
****************************************
可以定义多种类型的形参。
template<typename T1, typename T2>
class CTest
{...};
对象实例化时:
CTest testA<int, float>;
CTest testB<double, string>