~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:VS2015与 C++
撰写时间:2019/07/06
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
模板:类属—类型参数化,又称参数模板;使得程序(算法)可以从逻辑上抽象,把处理的对象(数据)类型作为参数传递。
两种模板机制:函数模板、类模板
函数模板:对不同数据类型的操作完全相同,用函数模板实现将会更简洁方便。
声明模板中使用的类属参数,形式为:template<类型参数表>
类型参数的形式为:typename T1,typename T2..,typename Tn
函数模板声明:template<类型参数表>
类型 函数名(形式参数表){语句序列}
函数模板定义由函数说明和函数定义组成
函数模板说明的类属参数必须在函数定义中至少出现一次
函数参数表中可以使用类属类型参数,也可以使用一般类型参数
T max(T a, T b){return a > b?a:b;}
void main(){ cout << max(1,2) << endl; 结果:
cout << max(1.5,2.3) << endl;}
重载函数模板:有些特殊情况需要函数模板重载,因为模板类型不能提供隐形的类型转换。
template
T max(T a, T b){return a > b?a:b;}
int max(int a,int b){return a > b?a:b;}//重载版本
void main(){ cout << max(1,2) << endl; 结果:
cout << max(1.5,5) << endl;}//由系统提供隐式转换
重载函数模板的匹配约定:
寻找和使用最符合函数名和参数类型的函数,若找到则调用它;
否则,寻找一个函数模板,将其实例化产生一个匹配的函数模板,若找到则调用它;
否则,寻找可以通过类型转换进行参数匹配的重载,若找到则调用它;
如果以上都不能找到匹配函数,则调用错误,如果调用多于一个的匹配选择,则调用出现二义性。
类模板:
类模板用于实现类所需数据的类型参数化。
类模板在表示如数组、表、图等数据结构显得特别重要,这些数据结构的表示和算法不受所包含元素类型影响。
类模板说明:template <类型形式参数表>
类声明
例: template
class TClassName
{ private: Type Date;}; //类属参数至少在类说明中出现一次
例:一个数组类模板
template< typename T >
class Array
{public:
Array(int s);
virtual ~Array();
virtual const T& Entry(int index) const;
virtual void Enter(int index, const T & value);
protected:
int size;
T * element;};
template
{ if (s > 1){ size = s; } else{ size = 1;} element = new T[size];}
template < typename T > Array < T > :: ~Array(){delete[] element;}
template < typename T > const T& Array < T > ::Entry(int index) const{
return element[index];}
template < typename T > void Array < T > ::Enter(int index, const T& value)
{ element[index] = value;}