C/C++总述:Study C/C++-CSDN博客
泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。
模板分为函数模板和类模板
函数模板
函数模板格式:
template <class 形参名,class 形参名,......> 返回类型 函数名(参数列表)
{
函数体
}
其中template和class是关见字,class可以用typename 关见字代替,在这里typename 和class没区别,<>括号中的参数叫模板形参,模板形参和函数形参很相像,模板形参不能为空。一但声明了模板函数就可以用模板函数的形参名声明类中的成员变量和成员函数,即可以在该函数中使用内置类型的地方都可以使用模板形参名。模板形参需要调用该模板函数时提供的模板实参来初始化模板形参,一旦编译器确定了实际的模板实参类型就称他实例化了函数模板的一个实例。
eg:
template<class T>
void Swap( T& left, T& right)
{
T temp = left;
left = right;
right = temp;
}
函数模板本质
函数模板是一个蓝图,它本身并不是函数,是编译器使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器
类模板
类模板格式
template<class 形参名, class 形参名, ..., class 形参名>
class 类模板名
{
// 类内成员定义
};
类模板和函数模板都是以template开始后接模板形参列表组成,模板形参不能为空,一但声明了类模板就可以用类模板的形参名声明类中的成员变量和成员函数,即可以在类中使用内置类型的地方都可以使用模板形参名来声明。
eg:
template <typename T>
class Stack {
private:
T* data;
int top;
public:
Stack() : top(-1) {
data = new T[100];
}
void push(T value) {
data[++top] = value;
}
T pop() {
return data[top--];
}
};