现在的位置: 首页 > 综合 > 正文

函数模板与类模板

2013年09月06日 ⁄ 综合 ⁄ 共 1743字 ⁄ 字号 评论关闭

C++提供的函数模板可以定义一个对任何类型变量进行操作的函数,从而大大增强了函数设计的通用性。使用函数模板的方法是先说明函数模板,然后实例化成相应的模板函数进行调用执行。

函数模板的一般说明形式如下:

template < 模板形参表>

<返回值类型> <函数名>(模板函数形参表)

{

      //函数定义体

}

其中,<模板形参表>可以包含基本数据类型,也可以包含类类型。类型形参需要加前缀class。如果类型形参多于一个,则每个类型形参都要使用class<模板函数形参表>中的参数必须是惟一的,而且<函数定义体>中至少出现一次。

函数模板定义不是一个实实在在的函数,编译系统不为其产生任何执行代码。该定义只是对函数的描述,表示它每次能单独处理在类型形式参数表中说明的数据类型。

1:编写一个对具有n个元素的数组a[ ]求最小值的程序,要求将求最小值的函数设计成函数模板

#include <iostream.h>

template <class T>

T min(T a[],int n)

{

int i;

T minv=a[0];

for(i=1;i<n;i++)

     if(minv>a[i])

       minv=a[i];

return minv;

}

void main()

{ int a[]={1,3,0,2,7,6,4,5,2};

   double b[]={1.2,-3.4,6.8,9,8};

   cout<<”a数组的最小值为:

          <<min(a,9)<< endl;

   cout<<”b数组的最小值为:

          <<min(b,4)<<endl;  

}

类模板与函数模板类似,它可以为各种不同的数据类型定义一种模板,在引用时使用不同的数据类型实例化该类模板,从而形成一个类的集合。

       类模板实际上是函数模板的推广。可以用相同的类模板来组建任何类型的对象集合。在传统C++中,可能有一个浮点数类或者一个整数类,如果使用类模板,可以定义一个对两者都适用的类number

类模板说明

              类模板说明的一般形式是:

template  <类型形参表>

class  <类名>

{     //类说明体  

}

template  <类型形参表>

<返回类型> <类名> <类型名表>::<成员函数1>(形参表)

{     //成员函数定义体  }

template  <类型形参表>

<返回类型> <类名> <类型名表>::<成员函数2>(形参表)

{     //成员函数定义体  }

12.3.2   使用类模板

              与函数模板一样,类模板不能直接使用,必须先实例化为相应的模板类,定义该模板类的对象后才能使用。

              建立类模板后,可用下列方式创建类模板的实例:

              <类名> <类型实参表> <对象表>

              其中,<类型实参表>应与该类模板中的<类型形参表>匹配。<类型实参表>是模板类(template class),<对象>是定义该模板类的一个对象。

              使用类模板可以说明和定义任何类型的类。这种类被称为参数化的类。如果说类是对象的推广,那么类模板可以说是类的推广。

              注意:类模板与模板类的区别

一个简单的类模板程序(求两个任意类型数的和)
template<class T>
class A
{

public:
A();
A(T _a,T _b);
T sum();
private:
T a;
T b;
};

 

template <class T>
A<T>::A()
{
a=0;b=0;
}

template<class T>
A<T>::A(T _a,T _b)
{
a=_a;b=_b;
}
template<class T>
T A<T>::sum()
{
return (a+b);
}
void main()
{
A<int> ai(3,4);
A<double> ad(3.1,4.0);
cout<<ai.sum()<<" "<<ad.sum()<<endl;
}

程序已经在vc6.0下调试通过,以上代码在一个文件中,别把类的声明放在一个.h中把实现放在.cpp中,类模板不支持分离只能是类的声明和定义放在同一个文件中。

抱歉!评论已关闭.