1.泛型編程:編寫與類型無關的通用代碼,是代碼復用的一種手段。模板是泛型編程的基礎
2.函數模板的格式
template<typename T1,typename T2,…,typename Tn>
返回類型 函數名(參數列表)
{
??//函數體
}
3.template<class T1,class T2,…,class Tn>
template<class T1,class T2,…,class Tn>
class 類模板名
{
??//類內成員聲明
};
4.使用模板時,編譯器一般不會進行類型轉換操作
以下代碼將不能通過編譯:
T Add(const T& x, const T& y)
{return x + y;
}
int main()
{int a = 10;double b = 1.1;int c = Add(a, b);return 0;
}
?因為在編譯期間,編譯器根據實參推演模板參數的實際類型時,根據實參a將T推演為int,根據實參b將T推演為double,但是模板參數列表中只有一個T,編譯器無法確定此處應該將T確定為int還是double。
5.類模板中的成員函數若是放在類外定義時,需要加模板參數列表
template<class T>
class Date
{
public:void Print();
private:T _year;T _month;T _day;
};
//類模板中的成員函數在類外定義,需要加模板參數列表
template<class T>
void Score<T>::Print()
{cout << _year << "-" << _month << "-"<< _day << endl;
}