C++模板学习

一、什么是模板

       在C++编程中,当我们需要获取两个变量之间的较大值时,考虑到变量的类型可能会是int、double等,最常用的方法往往是通过重载函数,实现不同类型的函数版本:

int Max(int lhs, int rhs)
{ 
    return (lhs > rhs) ? lhs : rhs;
}

double Max(double lhs, double rhs)
{
    return (lhs > rhs) ? lhs : rhs; 
}

       此时,当我们接到新的需求,需要获取两个char类型的变量之间的较大值时,我们就会再添加一个char类型重载函数:

char Max(char lhs, char rhs)
{
    return (lhs > rhs) ? lhs : rhs;
}

       每当新增一种的类型的需求,又需要实现多一个重载函数,无形中增加了开发人员的工作,当函数逻辑比较复杂,而且比较庞大时,也容易出现错误。从上面的代码可以看出,三个版本的重载函数除了类型不一样之外,逻辑基本一致,完成的功能也是相同的,因此,如果能有一个通用的函数,抽取出这些相同的代码逻辑,将可以大大减少代码的重复,提高代码的重用性。此时,使用C++的模板就可以很好的解决这些问题,通过模板,可以使得开发人员写出更通用、更灵活、类型无关的代码。


二、模板的分类和格式

       C++模板(template),主要分为函数模板和类模板。

2.1 函数模板

2.1.1 函数模板的格式和使用

       template <class 形参名, class 形参名, ......>
       返回类型 函数名(参数列表)

       {

           //函数体 

       }

       模板定义以关键字template开始,后接以<>括号括住的模板形参表,其中class是关键字,在这里class可以使用typename 代替,<>括号中的模板形参使用逗号进行分隔。下面使用函数模板实现前面的求较大值函数:

template<typename T>
T Max(const T &lhs, const T &rhs)
{
    return (lhs > rhs) ? lhs : rhs;
}
//测试用例:
int a = 34, b = 257;
double c = 1.4, d = 4.4;
char e = 'b', f = 'k';

cout<<Max(a, b)<<endl;//调用了int版本的模板函数,输出为:257
cout<<Max(c, d)<<endl;//调用了double版本的模板函数,输出为:4.4
cout<<Max(e, f)<<endl;//调用了char版本的模板函数,输出为:k

       当对上面定义的函数模板进行编译时,类型T就会被实际传入的类型所代替,例如Max(a, b)ab

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值