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

函数模板与类模板

2013年09月23日 ⁄ 综合 ⁄ 共 1125字 ⁄ 字号 评论关闭

1   所谓函数模板,实际是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板。

#include "stdafx.h"
#include<iostream>
using namespace std;
template<typename T>  //模板声明,其中T为类型参数
T max(T a,T b,T c)    //定义一个通用函数,用T作虚拟的类型名
{
 if(a<b)
  a=b;
 if(a<c)
  a=c;
 return a;
}

int _tmain(int argc, _TCHAR* argv[])
{
 int i,i1=8,i2=98,i3=32;
 double d,d1=39.3,d2=987.244,d3=83.987;
 i=max(i1,i2,i3);  // 调用模板函数,此时T被int取代
 d=max(d1,d2,d3);
 cout<<"整型最大值max="<<i<<endl;
 cout<<"实型最大值max="<<d<<endl;
 return 0;
}

程序运行结果:

注意,函数模板只适用于函数参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用函数模板

 

2   类模板

有时有两个或多个类,其功能是相同的,仅仅是数据类型不同,这时可以使用类模板来减少重复性的工作#include "stdafx.h"
#include<iostream>
using namespace std;
template<class numtype> //声明一个模板,虚拟类型为numtype
class Compare
{
public:
 Compare(numtype a,numtype b)
 {
  x=a;
  y=b;
 }
 numtype max()
 {
  return (x>y)?x:y;
 }
 numtype min()
 {
  return (x<y)?x:y;
 }
private:
 numtype x,y;

};

int _tmain(int argc, _TCHAR* argv[])
{
 Compare<int> cmp1(3,7);   //在类模板名之后在尖括号内指定实际的类型名
 cout<<"int型比较:"<<cmp1.max()<<endl;
 Compare<double> cmp2(9.544,1.5487); //在类模板名之后在尖括号内指定实际的类型名

 cout<<"double型比较:"<<cmp2.min()<<endl;
 Compare<char> cmp3('b','B');
 cout<<"char型比较:"<<cmp3.min()<<endl; //在类模板名之后在尖括号内指定实际的类型名

 return 0;
}

运行结果如下:

 

 

抱歉!评论已关闭.