模版函数与类模板

函数模板
利用函数模板,可以建立一个具有通用功能的函数,支持不同的函数参数和返回值,达到减少代码书写量的目的。
函数模板的语法形式如下:   
  template <typename T> // T代表在函数模板中要使用的通用类型,在该函数的调用过程中,T被具体化。
  函数定义
例如重载函数,求绝对值的函数只要声明一个函数模板:
template <typename T>
T abs(T value)
{
    return value>0? value: -value;
}
在主程序中可以这样使用函数模板:

int main()
{
    int nValue=-1,nResult;
    double dblValue=-1.2,dblResult;
    nResult=abs(nValue);
    dblResult=abs(dblValue);
    cout<<nValue<<″  ″<<nResult<<endl;
    cout<<dblValue<<″  ″<<dblResult<<endl;
    return 0;
}

模板特化

定义:
template <typename T>
class  XXX  { ... }

特化:
template <> class XXX<int> { .... }

类模板
数据成员变成另外一种数据类型,或者干脆是一个类的对象,又要重新拷贝,重新进行修改。这样不仅程序的代码数量急剧增加,修改过程中也很容易出现各种疏漏。用一种类似函数模板的机制来结决问题——类模板。
C++语言中的类模板的语法定义如下:   
  Template <模板参数表>
  类声明
注:当模板参数表中同时包含上述多项内容时,各项内容之间以逗号隔开。
与函数模板相同,类模板只有使用的时候才被具体化为某一种类型。
使用模板类来产生对象时,按如下形式声明:   模板<模板参数表> 对象名1,......对象名n;

//例子如下;
#ifndef EXAMPLE10_02_H
#define EXAMPLE10_02_H
template <class T>
class Max     //声明类模板Max
{
private:   
	T item1, item2,  item3;  //类型为T,T在该类的对象生成时具体化
public: 
	Max(){}
	Max(T thefirst,T thesecond, T thethird):item1(thefirst),item2(thesecond),item3(thethird)
	{

	}
	T GetMaxItem()
	{
		T maxitem;
		maxitem=item1>item2 ? item1: item2;
		maxitem=maxitem>item3? maxitem: item3;
		return maxitem;
	}
} ;
#endif
//测试:
void CtesttempDlg::OnBnClickedButton1()
{
	// TODO: Add your control notification handler code here
	Max<int> nmyMax(1,2,3);
	int a = nmyMax.GetMaxItem();
	Max<double> dblmyMax(1.2,1.3,-1.4);
	double b = dblmyMax.GetMaxItem();
	cout<<nmyMax.GetMaxItem()<<endl;
	cout<<dblmyMax.GetMaxItem()<<endl;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山西茄子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值