模板

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术:VS2015与 C++

 

撰写时间:2019/07/06

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

模板:类属—类型参数化,又称参数模板;使得程序(算法)可以从逻辑上抽象,把处理的对象(数据)类型作为参数传递。

两种模板机制:函数模板、类模板

 

函数模板:对不同数据类型的操作完全相同,用函数模板实现将会更简洁方便。

声明模板中使用的类属参数,形式为:template<类型参数表>

类型参数的形式为:typename T1,typename T2..,typename Tn

函数模板声明:template<类型参数表>

              类型 函数名(形式参数表){语句序列}

函数模板定义由函数说明和函数定义组成

函数模板说明的类属参数必须在函数定义中至少出现一次

函数参数表中可以使用类属类型参数,也可以使用一般类型参数

例://声明一个函数模板 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;}

 

重载函数模板:有些特殊情况需要函数模板重载,因为模板类型不能提供隐形的类型转换。

例:模板_第1张图片

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 Array::Array(int s)

{   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;}

你可能感兴趣的:(C++)