Part3.3【程设】函数模板、递归函数
作者:互联网
函数模板:
可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载 函数的函数体设计。
template <class 类型名1,class 类型名2,...(模板参数表)>
返回类型 函数名 (形参表)
{
函数体
意义: 对于功能完全一样,只是参数类型不同的函数,能写一段通用代码适用于多种不同 的数据类型,会使代码的可重用性大大提高,从而提高软件的开发效率。
注意:
- template关键字表示声明的是模板。
- < >中是模板的参数表,可以有一项或多项,其中的类型名称为参数化类型,是一种抽象类型或可变类型。
- class是类型关键字,也可以用typename作为关键字。
- 函数返回值类型可以是普通类型,也可以是模板参数表中指定的类型。
- 模板参数表中的参数类型可以是普通类型。
例子:
//将add函数定义成了一个函数模板:
template <class T>
T add(T x, T y)
{
return x+y;
}
函数模板定义后,就可以用它生成各种具体的函数(称为模板函数)。
在函数调用时, 用函数模板生成模板函数实际上就是将模板参数表中的参数化类型根据实参实例化(具体化) 成具体类型。
这个过程称为模板的实例化。函数模板实例化分为显式实例化与隐式实例化。
显式实例化
函数名<具体类型名1,具体类型名2,..., 常量表达式> (实参表)
根据< >中给出的具体类型,用类似于函数调用实参与形参结合的方式,将模板参数 表中的参数化类型一一实例化成具体的类型, 函数中的参数化类型也一一实例化。
如果模板参数表中有普通类型的形参,还需要用常量表达式去初始化。
例如:
有模板:
template <class T, int size>
T sum()
{
int arr[size]; ……
}
函数调用时使用sum<int, 100>() 可将T sum() 实例化成:
int sum()
{
int arr[100]; ……
}
隐式实例化
隐式实例化的格式为函数调用式,实例化过程是在实参与形 参结合时,用实参的类型实例化形参对应的参数化类型。
例如: 使用add( ‘A’ , ‘B’) 将T add(T x, T y) 实例化成: char add(char, char)
注意:
使用隐式实例化无法初始化模板参数表中的普通类型的形参,如果模板参数表中使用普通类型参数,必须使用显式初始化。
递归函数
自己调用自己的函数。
标签:函数,递归函数,参数表,Part3.3,实例,参数,类型,程设,模板 来源: https://blog.csdn.net/u014377763/article/details/112568859