模板
模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。
函数模板:
格式如下: 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 的区别?
当定义一个函数模板或者一个模板类的时候,下面的两种写法都是可以的(暂时不做更多的深入了解)
浙公网安备 33010602011771号