原创 c++模板

2010-10-24 15:52 1466 9 9 分类: 工程师职场

模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。
分两类,一个函数模板,一个是类模板


模板的概念
我们已学习过重载(overloading),对重载函数而言,c++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函


数。
例如为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(overloading)版本。


//example1
int max(int x,int y)
{
return (x>y)?x:y;
}
//example1
float max(float x,float y)
{
return (x>y)?x:y;
}
//example1
double max(double x,double y)
{
return (x>y)?x:y;
}
但如果在主函数中,我们分别定义了char a,b;那么执行max(a,b)时,程序就会出错,因为我们没有定义char
类型的重载版本。


函数模板的写法
函数模板的一般形式如下
Template <class 或者 typename T>
返回类型 函数名(形参表)
{//函数定义体}
 
template是一个声明模板的关键字,表示声明一个模板关键字class不能省略,
如果类型形参多余一个,每个形参前都要家class<类型 形参表>可以包含基本数据类型可以包含类型。
/********************************************************/
#include<iostream.h>


//声明一个函数模板,用来比较输入的两个相同数据类型的参数的大小,class也可以被typename代替
//T可以被任何字母或者数字代替
template <class T>
T min(T x,T y)
{
return(x<y)?x:y;
}


int main(void)
{
int n1=2,n2=10;
double d1=1.5,d2=2.5;
cout<<"较小整数:"<<min(n1,n2)<<endl;
cout<<"较小实数:"<<min(d1,d2)<<endl;
return 0;
}
/********************************************************/
#ifndef __1_H__
#define __1_H__


#include <iostream.h>


template<typename T1,typename T2>
class myClass
{
private:
T1 I;
T2 J;


public:
myClass(T1 a,T2 b);
void show();
};


template<typename T1,typename T2>
myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b)
{
}


template<typename T1,typename T2>
void myClass<T1,T2>::show()
{
cout<<"I="<<I<<",J="<<J<<endl;
}
#endif


 


#include "1.h"
int main(void)
{
myClass<int,int> class1(3,5);
class1.show();


myClass<int,char> class2(3,'a');
class2.show();


myClass<double,int> class3(2.9,10);
class3.show();


return 0;
}
/********************************************************/


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条