一、前言
模板可以使用户把函数或者类声明为一般形式,使得类中的某些成员数据或者成员函数的参数、返回值取得任意类型。
(1):模板是类实现对类型参数化的形式
(2):通常有两种形式:类模板和函数模板
(3):函数模板仅仅针对返回类型和参数类型不同的函数
(4):类模板针对的是成员数据和成员函数类型不同的类
注意:
模板的定义或声明必须在全局,命名空间内或类范围内
二、函数模板
对于具有各种参数类型,相同个数,相同顺序的同一函数(重载函数)。
#include<iostream>
using namespace std;
template<class T> T max(T a, T b)
{
cout << "a和b的数据类型为:";
cout << typeid(a).name() << ' ' << typeid(b).name() << endl;//输出a和b的数据类型
return a > b ? a : b;
}
int main()
{
cout << max(0, 10) << endl;
cout << max(0.1, 0.2) << endl;
cout << max('a', 'b') << endl;
system("pause");
return 0;
}
输出结果:
通过输出我们就可以发现使用函数模板的好处是什么了,如果我们不用模板的话,同一个类型的函数要写三次,浪费内存也降低了我们的开发效率
三、类模板
#include<iostream>
using namespace std;
template<class T> class A
{
private:
T a;
public :
A(T a)
{
this->a = a;
}
void print()
{
cout << "a的数据类型 为:";
cout << typeid(a).name() << endl;
cout << "a的值为:";
cout << a << endl;
}
};
/*.
类模板的使用:
1、程序开头,说明类模板的定义,如上类的定义
2、在适当的地方创建类实例,编译时,程序会更具提供的数据类型,生成对应的对象
3、当确定数据类型,当前对象只可以使用这个数据类型了
*/
int main()
{
A<int> i(10);
A<char> c('a');
A<double> d(0.11);
i.print();
c.print();
d.print();
system("pause");
return 0;
}
输出结果: