一、类模板和模板类
1、类模板
-
类模板的重点是模板。表示一个专门用来产生类的模板
- 类模板是对一批仅仅成员数据类型不同的类的抽象。只要为这一批类创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类(模板类),从而大大提高编程的效率。
template <class T> //或 template <typename T>
class Vector
{
private:
T x;
public:
void setX(T x){
x = x;
};
};
2、模板类
Vector<int> i;
i.setX(5);
Vector<string> s;
s.setX("xxx");
总结:模板类是类模板实例化的产物
二、函数模板和模板函数
1、函数模板
-
函数模板的重点是模板。表示一个专门用来生产函数模板
- 函数模板就是一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟类型来表示
- 在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能
template <typename T> //或 template <class T>
void Swap(T& a, T& b)
{
T tmp = a;
a = b;
b = tmp;
}
2、模板函数
-
模板函数的重点是函数。表示由一个模板生成而来的函数
- 在生成模板函数时,可以显式生成,也可以隐式生成
template <typename T> //或 template <class T>
void Swap(T& a, T& b)
{
T tmp = a;
a = b;
b = tmp;
}
void main()
{
int a = 10; // 整型
int b = 20;
// 模板函数
Swap(a, b); // 自动推到调用(隐式)
//Swap<int>(a, b); // 显示指定调用(显式)
cout << "a = " << a << endl;
cout << "b = " << b << endl;
float c = 12.3; // 浮点型
float d = 23.4;
//Swap(c, d); // 自动推到调用
Swap<float>(c, d); // 显示指定调用
cout << "c = " << c << endl;
cout << "d = " << d << endl;
}
总结:模板函数是函数模板实例化的产物