模板
模板把函数或类要处理的数据类型参数化,表现为参数的多态性。模板也是一种代码的重用机制。
分为函数模板和类模板
函数模板
函数模板的定义格式如下:
template <模板参数表>
<返回值类型><函数名>(参数表)
{
...
}
#include <iostream>
#include <iomanip>
using namespace std;
template <typename T>
T square(T number)
{
return number * number;
}
template <typename T>
T T_max(T a,T b)
{
return a>b?a:b;
}
int main()
{
int iValue = 10;
cout << "The square is " << square(iValue)<< endl;
double dValue = 10.08;
cout << "The square is " << square (dValue) << endl;
int a1 = 1,b1 = 8;
float a2 = 3.9 ,b2 = 8.8;
cout<<T_max(a1,b1)<<endl;
cout<<T_max(a2,b2)<<endl;
return 0;
}
开始定义了一个max()的函数,但是报错了,原因是于C++库中的max()函数中冲突了。
类模板
类模板定义
template <模板参数表>
class <类模板名>
{
...
}
#include <iostream>
using namespace std;
template <typename T>
class MyList
{
public:
MyList(int size)
{
_addr = new T[size];
_size = size;
}
~ MyList()
{
delete [] _addr;
}
T& operator[](int i);
friend ostream& operator<<(ostream &out,MyList<T> mylist)
{
cout<<"[";
for(int i = 0;i < mylist._size;i++)
{
cout<<mylist._addr[i]<<" ";
}
cout<<"]"<<endl;
return out;
}
private:
int _size;
T *_addr;
};
template <typename T>
T& MyList<T>::operator[](int i)
{
return _addr[i];
}
int main()
{
int num = 5;
MyList<int> a1(num);
for(int i = 0;i<num;i++)
{
a1[i] = i;
}
cout<<a1<<endl;
MyList<double> a2(num);
for(int i = 0;i<num;i++)
{
a2[i] = i*0.01;
}
cout<<a2<<endl;
MyList<char> a3(num);
for(int i = 0;i<num;i++)
{
a3[i] = 'a'+ i;
}
cout<<a3<<endl;
return 0;
}