模板

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

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

 

撰写时间:2019/07/06

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

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

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

 

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

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

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

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

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

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

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

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

例://声明一个函数模板 template<typename T>

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<typename T>

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<typename Type>

            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<typename T> Array<T>::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;}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值