用c++模板模板法小结(推荐)

  

  

模板(模板)指c++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计C + +的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO流。

  

  

在c++入门中,很多人会接触<代码>交换(int& int&) 这样的函数类似代码如下:

        无效的交换(int& int&;b) {   int temp=一个;   a=b;   b=temp;   }      

但是如果是要支持长字符串,自定义类的交换函数,代码和上述代码差不多,只是类型不同,这个时候就是我们定义互换的函数模板,就可以复用不同类型的交换函数代码,函数模板的声明形式如下:

        模板& lt;类identifier>function_declaration;   模板& lt; typename identifier>function_declaration;      

交换函数模板的声明和定义代码如下:

     //method.h   template无效的交换(T&t1, T&t2);   # include“method.cpp”//method.cpp      template无效的交换(T&t1, T&t2) {   T人体;   人体=t1;   t1=t2;   t2=人体;   }      

,上述是模板的声明和定义了,那模板如何实例化呢,模板的实例化是编译器做的事情,与程序员无关,那么上述模板如何使用呢,代码如下:

     //main.cpp   # include & lt; stdio.h>   # include“method.h”   int main () {//模板方法   int num1=1, num2=2;   swap (num1, num2);   printf (" num1: % d num2: % d \ n”, num1, num2);   返回0;   }      

这里使用交换函数,必须包含交换的定义,否则编译会出错,这个和一般的函数使用不一样,所以必须在方法。h文件的最后一行加入<代码> # include“method.cpp "

。   

  

考虑我们写一个简单的栈的类,这个栈可以支持int类型,长类型,字符串类型等等,不利用类模板,我们就要写三个以上的堆栈类,其中代码基本一样,通过类模板,我们可以定义一个简单的栈模板,再根据需要实例化为int栈,栈,栈字符串。

     //statck.h   模板& lt;类T>栈类{   公众:   堆栈();   ~堆栈();   空推T (T);   T pop ();   bool isEmpty ();   私人:   T * m_pT;   int m_maxSize;   int m_size;   };   # include“stack.cpp”//stack.cpp   模板& lt;类T>StackStack空白StackT Stackbool Stack      

上述定义了一个类模板——栈,这个栈很简单,只是为了说明类模板如何使用而已,最多只能支持100个元素入栈,使用示例如下:

     //main.cpp   # include & lt; stdio.h>   # include“stack.h”   int main () {   StackintStack;   intStack.push (1);   intStack.push (2);   intStack.push (3);      而(! intStack.isEmpty ()) {   printf (" num: % d \ n ", intStack.pop ());   }   返回0;   }      

  

模板可以有类型参数,也可以有常规的类型参数int,也可以有默认模板参数,例如

  
  

template<类T, T def_val>栈类{…}

     

上述类模板的栈有一个限制,就是最多只能支持100个元素,我们可以使用模板参数配置这个栈的最大元素数,如果不配置,就设置默认最大值为100代码如下:

     //statck.h   模板& lt;类T, int最大尺寸=100比;栈类{   公众:   堆栈();   ~堆栈();   空推T (T);   T pop ();   bool isEmpty ();   私人:   T * m_pT;   int m_maxSize;   int m_size;   };   # include“stack.cpp”//stack.cpp   模板& lt;类T, int maxsize>Stack::堆栈(){   m_maxSize=最大容量;   m_size=0;   m_pT=new T [m_maxSize];   }   模板& lt;类T, int maxsize>Stack:: ~堆栈(){   删除[]m_pT;   }   模板& lt;类T, int maxsize>空白Stack::推动(T T) {   m_size + +;   m_pT [m_size - 1]=t;   }   模板& lt;类T, int maxsize>T Stack:: pop () {   T T=m_pT (m_size - 1);   m_size——;   返回t;   }   模板& lt;类T, int maxsize>bool Stack

用c++模板模板法小结(推荐)