一、前言
模板可以使用户把函数或者类声明为一般形式,使得类中的某些成员数据或者成员函数的参数、返回值取得任意类型。
(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;
}

输出结果:
c++模块详解_模板
通过输出我们就可以发现使用函数模板的好处是什么了,如果我们不用模板的话,同一个类型的函数要写三次,浪费内存也降低了我们的开发效率

三、类模板

#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;
}

输出结果:
c++模块详解_函数_02