文章目录
引子 我们以前对于交换两个变量可能会根据其参数类型的不同写不同的函数,但是每个函数除去参数类型之外都是相同的 如
1 2 3 4 5 6 7 8 9 10 11 void swapint (int *a,int *b) {}void swap (int & a,int & b) {}void swap (double & a,double &b) {}
因此就造成了很大的冗余没有必要,所以就提出了模板的概念
模板 函数模板
模板和印刷术非常像 普通情况下,如,要抄一首诗,1000编,让1000个人来抄,效率很低 我们就可以把诗词刻在一个模具上面,印刷出来1000份,非常的方便
template < class T> 也可以template < class T1,class T2……>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 template <class T >void swap (T& a, T& b) { T x = a; a = b; b = x; }int main () { int a = 0 , b = 1 ; double c = 1.1 , d = 2.0 ; swap (a, b); char e = ' ' , f = 'a' ; return 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 template <class t>t add (const t& a, const t& b) { return a + b; }template <class T1,class T2,class T3>T1 add (const T2& a, const T3& b) { return a + b; }int main () { int a = 1 , b = 2 ; double c = 1.1 , d = 2.3 ; cout << add (a, b) << endl; cout << add (c, d) << endl; cout<<add ((double )a, d)<<endl; cout << add <int >(a, d) << endl; cout << add <double >(a, d) << endl; cout << add (c, d) << endl; return 0 ; }
类模板 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 template <class t1 >class Stack {private : int _top; int _capacity; t1 * _a;public : Stack (int capacity = 4 ) :_top(0 ) , _capacity(4 ) { _a = new t1[capacity]; } ~Stack () { delete [] _a; _a = nullptr ; } void Push (const t1& m) ; };template <class t1 >void Stack<t1>::Push (const t1& m) { }int main () { Stack<int > st1 (2 ) ; Stack <double >st2 (2 ); Stack<int *>st3; Stack<char >st4; st1.Push (1 ); return 0 ; }