模板

模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。

函数模板:

格式如下:
template <typename 类型参数1, typename 类型参数2, ...>
返回类型 函数名(形参表)
{
    // 函数定义
}
#include <iostream>
using namespace std;

template <typename T>
void Swap(T a, T b)
{
    T temp = a;
    a = b;
    b = temp;
    cout << a << '\t' << b << endl;
}

int main(int argc, char *argv[])
{
    int n1 = 16, n2 = 200;
    Swap(n1, n2);

    double d1 = 161.23, d2 = 1234.45;
    Swap(d1, d2);

    char c1 = 'L', c2 = 'S';
    Swap(c1, c2);

    bool b1 = true, b2 = false;
    Swap(b1, b2);

    return 1;
}

输出:
200     16
1234.45 161.23
S       L
0       1

类模板:

格式如下:
template <class 类型参数1, class 类型参数2, ...>
class 类名
{
    // 类定义
};
#include <iostream>
using namespace std;

template <class M, class N>
class demo
{
private:
    M m;
    N n;
public:
    demo(M m, N n)
    {
        this->m = m;
        this->n = n;
    }
    void show();
};

// 注意点三:
// 在类外定义函数时,除了加template<class M, class N>
// 还需要在类名后面添加参数列表
template <class M, class N>
void demo<M, N>::show()
{
    cout << m << endl;
    cout << n << endl;
}

int main(int argc, char *argv[])
{
    // 注意点一:在创建对象的时候,需要在类名后面指明类型
    demo<double, int> d1(12.5, 9);
    d1.show();

    // 注意点二:在创建堆的对象指针时,等号前后的类名都需要指明参数类型,而且要和参数一致
    demo<double, int> *d2 = new demo<double, int>(12.14, 8);
    d2->show();

    return 0;
}

输出:
12.5
9
12.14
8

模板参数中 class 和 typename 的区别?

当定义一个函数模板或者一个模板类的时候,下面的两种写法都是可以的(暂时不做更多的深入了解)

posted @ 2023-09-13 16:56  jason8826  阅读(59)  评论(0)    收藏  举报