函数模板:实际上是建立一个通用函数,其函数返回类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用的函数就是函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。
#include <iostream>
using namespace std;
template < typename T >
T abs(T x) {
return x < 0 ? -x : x;
}
int main(int argc, char *argv[])
{
int n = -5;
double d = -5.5;
cout << abs(n);
cout << abs(d);
cout << abs(d+n);
return 0;
}
类模板:只有数据成员类型不同的类的集合
#include <iostream>
using namespace std;
struct Student {
int id;
float gpa;
};
template <class T>
class Store{
public:
Store(void);
T GetElem(void);
void PutElem(T x);
private:
T item;
int haveValue;
};
template <class T>
Store<T>::Store(void)
: haveValue(0)
{
}
template <class T>
T Store<T>::GetElem(void) {
if (haveValue == 0) {
cout << "No item present!";
}
return item;
}
template <class T>
void Store<T>::PutElem(T x){
haveValue++;
item = x;
}
int main(int argc, char *argv[])
{
Student g ={1000,23};
Store<int> S1,S2;
Store<Student> S3;
Store<double> D;
S1.PutElem(3);
S2.PutElem(-7);
S3.PutElem(g);
return 0;
}