模板:模板是對一種對類型進行參數化的工具。
模板的聲明或者定義只能在全局,命名空間或者類范圍內進行。即不能在局部范圍,函數內進行。
函數模板 參數類型不一樣的但是功能及函數名一樣的函數
函數模板的聲明定義語法上差異不大,就像普通函數一樣使用
template
T add(T x, T y);
template
C add(C x, C y)
{
return x+y;
}
類模板 成員屬性的類型和成員函數的類不一樣但是成員屬性及函數一樣的類
template
class Demo{
public:
Demo(T1 a, T2 b);
void setx(T1 a);
static void sety(Demo &, T2 val);
T1 getx() const;
T2 gety() const;
private:
static T1 x;
T2 y;
};
友元函數模板
如果一個類是模板類,又要實現運算符重載,就是一個友元函數模板;
實質是類模板和函數模板的綜合運用
template
class Demo{
public:
Demo(const int val);
public:
T getval() const;
void setval(const int val);
template
friend Demo
private:
T ival;
};
非類型模板參數
template
class Array{
public:
Array();
Array(const Array &);
~Array();
public:
T& at(const int id=0) const;
T& operator[](const int id)const;
private:
T* const buffer;
};
T:模板類型參數;len:模板非類型參數;T、len都可以有默認值