C++模板

本篇文章部分參考自互聯網有關模板的解釋,再通過本身實踐及理解而寫做出來。感謝互聯網資料的幫助。
 
模板定義:
模板就是實現代碼重用機制的一種工具,它能夠實現類型參數化,即把類型定義爲參數, 從而實現了真正的代碼可重用性。模板能夠分爲兩類,一個是函數模板,另一個是類模板。
 
模板實現的寫做方法: 
1.函數模板的寫法
函數模板的通常形式以下:
Template <class 或者也能夠用typename  T>
返回類型 函數名(形參表)
{//
函數定義體 }
說明: template 是一個聲明模板的關鍵字,表示聲明一個模板關鍵字class 不能省略,若是類型形參多於一個 ,每一個形參前都要加class < 類型 形參表> 能夠包含基本數據類型能夠包含類類型.
注意:每一個模板函數前面都要加上「Template <class 或者也能夠用typename  T> 」這一行。
//在template語句與函數模板語句之間不容許有別的語句;
請看如下程序 :
//mian.cpp
#include  <iostream>
// 聲明一個函數模版, 用來比較輸入的兩個相同數據類型的參數的大小,class 也能夠被typename 代替,
//T 能夠被任何字母或者數字代替。
template  <class  T>
T max(T &x,T &y)//主要必須是參數引用,不能是 T min(T x,T y)
  if (a>b)
 {
  return a;
 }
 return b;
}
void  main( )
{
 int i1 = 3,i2=5;
 char c1='a',c2='b';
 double d1=0.35,d2 = 0.2;
 
 cout<<"for int最大的爲:"<<max(i1,i2)<<endl;
 cout<<"for char最大的爲:"<<max(c1,c2)<<endl;
 cout<<"for double最大的爲:"<<max(d1,d2)<<endl;
}
 
2.  類模板的寫法
定義一個類模板:
Template < class 或者也能夠用typename  T >
class 類名{

};
說明:其中,template 是聲明各模板的關鍵字,表示聲明一個模板,模板參數能夠是一個,也能夠是多個。 個前面要有class或typename,用逗號隔開
注意:每一個模板類數前面都要加上「Template <class 或者也能夠用typename  T> 這一行。
例如:定義一個類模板:
// template.h
#paragm once
 
template <typename  T1,typename  T2>
class  myClass{
private :
      T1 I;
      T2 J;
public :
      myClass(T1 a, T2 b);//若成員函數中使用了模板,則此函數須要在類體外定義!!!
      void  show();
};
 
//構造函數
template  <typename  T1,typename  T2>
myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b){}
 
void show();
template  <typename  T1,typename  T2>
void  myClass<T1,T2>::show()
{
      cout<<"I=" <<I<<", J=" <<J<<endl;
}
 
注意:每一個模板類的成員函數前都必須加上模板聲明template  <typename  T1,typename  T2> ,而後接下來命名相似於普通類,但必須加上類參數myClass<T1,T2>
 
// run.cpp
#include  "template.h"
#include  <iostream>
using namespace std; 
void  main()
{
//什麼一個類的對象相似於普通類對象聲明,但必須實例化類模板參數,如:myClass<int ,int > ,其他的調用函數方法跟普通類同樣
 
 myClass<int,int>class1(1,2);
 class1.show();
 
 myClass<char,char>class2('a','b');
 class2.show();
}
 
3.非類型模版參數
通常來講,非類型模板參數能夠是常整數(包括枚舉)或者指向外部連接對象的指針。
那麼就是說,浮點數是不行的,指向內部連接對象的指針是不行的。

template <typename  T, int  MAXSIZE>
class  Stack{
Private:
        T elems[MAXSIZE];
};
Int main()
{
        Stack<int , 20> int20Stack;
        Stack<int , 40> int40Stack;
};
 
注意:最主要是注意格式,特別是類模板 定義的格式 和 實例化類模板的格式 ,函數模板定義時參數用引用& !
相關文章
相關標籤/搜索