一、函数模板简介
函数体相同函数都可以用函数模板,根据实参类型替换虚拟类型。
如两个数比较大小:
int max(int a,int b)
{
return a>b?a:b;
}
char max(char a,char b)
{
return a>b?a:b;
}
如果用函数模板实现,通用性和代码简洁性大大提高。
#include <iostream>
using namespace std;
template <typename T>
T max(T a, T b)
{
return a > b ? a : b;
}
void main()
{
int iMax = max(3,5);
char cMax = max('w','c');
cout << "iMax=" << iMax << endl;
cout << "cMax=" << cMax << endl;
}
二、类模板的简介
目的是建立一个通用的类。
还是用比较两个数大小的例子来进行说明。一般做法如下:
#include <iostream>
using namespace std;
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;
};
void main()
{
CMax *p = new CMax(3,5);
cout << "Max:" << p->GetMax() << endl;
delete p;
}
如果要比较两个字符的大小,那么就得重新再写一个类,显得有些冗余。使用类模板则会高效许多。
#include <iostream>
using namespace std;
template <typename T>//or
//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();
cout << "iMax:" << iMax << " " << "chMax:" << chMax << endl;
}