模板函数template functions和模板类的基本区别template class

来源:互联网 发布:微电影剪辑软件 编辑:程序博客网 时间:2024/05/01 04:58

通过侯老师编写的书籍MFC中,对Template有了一个更加深刻的认识。

首先,介绍模板函数template functions:

         计算一个数值幂次方,函数名为power。该函数只接受正幂次方数,如果为负幂次方,使结果为0.

         模板函数中,<class T>只不过是表示:T是一种类型,该类型可以是int,long,也可以是double类型,而此一类型将在调用此函数时才给予。

         下面是power函数的template版本:

template<class T>

T power(T base,int exponent)

{

         T result=base;

         if(exponent==0)

                   return (T)1;

         if(exponent<0)

                   return (T)0;

         while(--exponent)

                   result *=base;

         return result;

}

注意返回值必须为类型T,以吻合template函数的声明。

下面是template函数的调用方法:

#include "iostream.h"

void main()

{

         int i=power(5,4);

         long l=power(1000L,3);

         cout<<"i= "<<i<<endl;

         cout<<"l= "<<l<<endl;

}

结果为:

i=625

l=1000000000

在第一次调用时,T变成了int,在第二次调用中T变成了long

 

下面是模板类template classes的介绍:

         同样举个例子,让Cthree类储存三个成员变量,成员函数Min传回最小值,成员函数Max传回最大值。我们把他设计为template  classes,以便这个类能适应于各个样式的数据类型:

template <class T>

class CThree

{

         public:

                   CThree(T t1,T t2,T t3);

                   T Min();

                   T Max();

         private:

                   T a,b,c;

};

下面是成员函数:

 

template <class T>

T  CThree<T>::Min()

{

         T minab=a<b?a:b;

         return minab<c?minab:c;

}

 

template <class T>

T  CThree<T>::Max()

{

         T maxab=a<b?b:a;

         return maxab<c?c:maxab;

}

template <class T>

CThree<T>::CThree(T t1,T t2,T t3):

         a(t1),b(t2),c(t3)

         {

                   return;

         }

T看成是int,long,double等类型就可以了,还要注意每个成员函数前都要加上template <class T>,而且类名称应该使用CThree<T>

下面是template  class的使用方式:

#include "iostream.h"

void main()

{

         CThree<int>obj1(2,5,4);

         cout<<obj1.Min()<<endl;

         cout<<obj1.Max()<<endl;

 

         CThree<float>obj2(8.52,-6.75,4.54);

         cout<<obj2.Min()<<endl;

         cout<<obj2.Max()<<endl;

}

结果为:

2

5

-6.75

8.52

原创粉丝点击