函数模板 类模板 默认模板参数

函数模板
定义:函数模板不是一个实在的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能。
一般形式:
template<类型形式参数表>返回类型 函数名(形式参数表)
{
… //函数体
}
函数模板分成template 和函数名
template
void fun(T t)
{
… //函数实现
}
举例:一个求和的函数模板
template //定义一个模板类型
type Sum(type xvar,type yvar) //定义函数模板
{
return xvar+yvar;
}
程序中调用模板
int iret = Sum(10,20); //实现两个整数相加
double dret = Sum(10.5,20.5); //实现两个实数相加
函数模板的作用
调用模板可以正确计算整型数和实型数的最大值:

重载函数模板
整型数和实型数编译器可以直接进行比较,所以使用函数模板后也可以直接进行比较,但如果是字符指针指向的字符串该如何比较呢?答案是通过重载函数模板来实现。通常字符串需要库函数来进行比较,通过重载函数模板实现字符串的比较。
程序在重载的函数模板min的实现中,使用strcmp库函数来完成字符串的比较,此时使用min函数可以比较整型数据、实型数据、字符数据和字符串数据。

类模板
类模板的定义与声明
使用template关键字不但可以定义函数模板,也可以定义类模板。类模板代表一族类,是用来描述通用数据类型或处理方法的机制,它使类中的一些数据成员和成员函数的参数或返回值可以取任意数据类型。类模板可以说是用类生成类,减少了类的定义数量。

类模板的一般定义形式是:
template <类型形式参数表> class 类模板名
{
… //类模板体
};
类模板成员函数定义形式为:
template <类型形式参数表>
返回类型 类模板名 <类型名表>:::成员函数名(形式参数列表)
{
… //函数体
}

template是关键字,类型形式参数表与函数模板定义相同。类模板的成员函数定义时的类模板名与类模板定义时要一致,类模板不是一个真实的类,需要重新生成类,生成类的形式如下:
类模板名<类型实在参数表>
用新生成的类定义对象的形式如下:
类模板名<类型实在参数表>对象名
例如:

在这里插入图片描述

在这里插入图片描述

将模板类的参数设置为整型,然后用模板类声明对象。代码如下:
Container myContainer; //声明Container类对象
声明对象后,就可以调用类成员函数,代码如下:
int i=10;
myContainer.insert(i);

简单类模板
类模板中的类型形式参数表可以在执行时指定,也可以在定义类模板时指定。下面看类型参数如何在执行时指定。
在这里插入图片描述

默认模板参数
默认模板参数就是在类模板定义时设置类型形式参数表中一个类型参数的默认值,该默认值是一个数据类型,有默认的数据类型参数后,在定义模板新类时就可以不进行指定。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值