C++——模版:函数模版

来源:互联网 发布:灌篮高手的影响力知乎 编辑:程序博客网 时间:2024/05/16 15:36

需求分析:

学习模版的使用方法


编译环境:

visual studio 2010


解决方案:

template <class T>T Max( T a, T b ){// 比较获得a,b中的最大值    return a > b ? a : b;}class Person{//..public:    Person( int nL, int nP ) : m_nLevel(nL), m_nPower(nP){    // 构造函数    }BOOL operator>( const Person& p ){    // 重载>供Max模版函数调用        if( this->m_nLevel> p.m_nLevel)            return TRUE;        else            return FALSE;    }    int m_nLevel;   // 等级    int m_nPower;   // 实力};class Skill{//..public:    Skill( int nL, int nD ) : m_nLevel(nL), m_nDamage(nD){    // 构造函数    }    BOOL IsNBThan( Skill& b ){    // 供特化的Max<Skill>模版使用        if( this->m_nDamage > b.m_nDamage )            return TRUE;        else            return FALSE;    }    int m_nLevel;    // 等级    int m_nDamage;   // 伤害};// 模版特化,也就是针对Skill类使用下面的比较方式template <Skill>Skill Max( Skill a, Skill b ){    return a.IsNBThan( b ) ? a : b;}int _tmain(int argc, _TCHAR* argv[]){    // int类型模版    int nMax1 = Max( 3, 4 );    // double 类型模版    double dMax = Max( 3.02, 5.68 );    // 以下编译就会报错    // int nMax2 = Max( 3, 5.3 );    // double类型模版,结果转成int而已    int nMax3 = Max( 2.15, 6.66 );    // int型模版,不过参数为变量    int nMax4 = Max( nMax1, nMax2 );    // 以Person类为模版的Max函数    // 需要类重载实现>操作    // 返回等级高的Person(20,1000)    Person p = Max( Person( 20, 1000 ), Person( 40, 800 ) );    // 以Skill类为模版的Max函数    // 使用特化的比较函数IsNBThan    // 返回伤害高的Skill(1,2000)    Skill s = Max( Skill( 1, 2000 ), Skill( 3, 600 ) );    return 0;}


返回:

C/C++——模版相关知识