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