做的网站底部应该标注什么意思,uilike学堂,仿站建站教程,wordpress page页实现一个类模板
格式#xff1a;
templatetypename 占位符(inline) 返回类型 模板类类名自定义类型名::
模板类成员函数名(const 自定义类型名 参数名)一个以函数模板完成的运算符
//非模板函数形式
ostream operator(ostream
templatetypename 占位符(inline) 返回类型 模板类类名自定义类型名::
模板类成员函数名(const 自定义类型名 参数名)一个以函数模板完成的运算符
//非模板函数形式
ostream operator(ostream,const BinaryTreeint );//模板函数形式
template typename elemType
inline ostream
operator( ostream os,const BinaryTreeelemTypebt)
{os Tree: endl;bt.print(os);return os;
}BinaryTreestringbts;
coutbtsendl;
//编译器将elemType指定为string产生一个对应的运算符BinaryTreeintbti;
coutbtiendl;
//编译器将elemType指定为int产生一个对应的运算符常量表达式与默认参数值
也可以用常量表达式作为模板参数
templateint len,int beg_posclass num_sequence
{
public:virtual ~num_sequence(){};int elem(int pos)const;const char* what_am_i()const;static int max_elems(){return _max_elems;}ostream print(ostream oscout) const;protected:virtual void gen_elems(int pos) const 0;bool check_integrity(int pos,int size)const;num_sequence(vectorint*pe):_pelems(pe){}static const int _max_elems 1024;vectorint *_pelems;
};templateint length, int beg_pos 1//带有默认参数值
class Fibonacci:public num_seuqencelength,beg_pos
{
public:Fibonacci():num_sequencelength,beg_pos(_elems){}protected:virtual void gen_elems(int pos)const;static vectorint _elems;
};全局作用域内的函数和对象其地址也是一种常量表达式因此可以用来表达模板参数
templatevoid (*pf)(int pos, vectorint seq)class numeric_sequence
{
public:numeric_sequence(int len,int beg_pos 1){if(!pf)//....产生错误信息并退出{...}private:int _len;int _beg_pos;vectorint _elems;
};//使用
//pf指向“依据特定数列类型产生pos个元素放到vector seq内”的函数
void fibonacci(int pos,vectorintseq);
void pell(int pos,vectorintseq);
//...
numeric_seuqencefibonacci ns_fib(12);
numeric_seuqnecepell ns_peel(18,8);以模板参数作为一种设计策略
将某种特定的命名规范强加于被当作参数的类身上每个类都必须提供类模板中调用到的函数。
templatetypename num_seq
class NumericSequence{
public:NumericSequence(int len1,int bpos1):_ns(len,bpos){}//以下会通过函数的命名规范调用未知的数列类中的同名函数//此处所谓函数命名规范是每个num_seq参数类都必须提供//名为calc_elems和is_elem的函数void calc_elems(int sz) const {_ns.calc_elems(sz);}bool is_elem(int elem) const {return _ns.is_elem(elem);}//...private:num_seq _ns;
};成员模板函数
非模板类里定义成员模板函数: 在只写一份函数定义的情形下支持任何类型。
class PrintIt
{
public:PrintIt(ostream os):_os(os){}//成员模板函数
templatetypename elemType
void print(const elemType elem,char delimiter\n)
{_os elem delimiter;
}
private:ostream os;
}模板类里定义成员模板函数:
templatetypename OutStream
class PrintIt{
public:PrintIt(OutStream os):_os(os){}//成员模板函数template typename elemTypevoid print(const elemType elem,char delimiter\n){_oselemdelimiter;}
private:ostream _os;
};