本篇文章部分參考自互聯網有關模板的解釋,再經過自己實踐及理解而寫作出來。感謝互聯網資料的幫助。
模板定義:
模板就是實現代碼重用機制的一種工具,它可以實現類型參數化,即把類型定義為參數, 從而實現了真正的代碼可重用性。模板可以分為兩類,一個是函數模板,另外一個是類模板。
模板實現的寫作方法:
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;
…
};
注意:最主要是注意格式,特別是類模板 定義的格式 和 實例化類模板的格式 ,函數模板定義時參數用引用& !