背景
C++ 是很强大,有各种特性来提高代码的可重用性,有助于减少开发的代码量和工作量。
C++ 提高代码的可重用性主要有两方面:
- 继承
- 模板
继承的特性我已在前面篇章写过了,本篇主要是说明「模板」的特性。
使用「模板」的特性设计,实际上也就是「泛型」程序设计。
函数模板 01 变量交换函数模板假设我们设计一个交换两个整型变量的值的函数,代码如下:
// 交换两个整型变量的值的Swap函数:
void Swap(int & x,int & y)
{
int tmp = x;
x = y;
y = tmp;
}
如果是浮点类型的变量的值交换,则替换 int 类型为 double 即可,代码如下:
// 交换两个double型变量的值的Swap函数:
void Swap(double & x,double & y)
{
double tmp = x;
x = y;
y = tmp;
}
那如果是其他变量类型的值交换,那不是每次都要重新写一次 Swap
函数?是不是很繁琐?且代码后面会越来越冗余。
能否只写一个 Swap
函数,就能交换各种类型的变量?
答案是肯定有的,就是用「函数模板」来解决,「函数模板」的形式:
template
返回值类型 模板名 (形参表)
{
函数体
};
具体 Swap
「函数模板」代码如下:
template
就是模板定义的关键词,T
代表的是任意变量的类型。
template
void Swap(T & x,T & y)
{
T tmp = x;
x = y;
y = tmp;
}
那么定义好「函数模板」后,在编译的时候,编译器会根据传入 Swap
函数的参数变量类型,自动生成对应参数变量类型的 Swap
函数:
int main()
{
int n = 1,m = 2;
Swap(n,m); //编译器自动生成 void Swap(int & ,int & )函数
double f = 1.2,g = 2.3;
Swap(f,g); //编译器自动生成 void Swap(double & ,double & )函数
return 0;
}
上面的实例化函数模板的例子,是让编译器自己来判断传入的变量类型,那么我们也可以自己指定函数模板的变量类型,具体代码如下:
int main()
{
int n = 1,m = 2;
Swap(n,m); // 指定模板函数的变量类型为int
double f = 1.2,g = 2.3;
Swap(f,g); // 指定模板函数的变量类型为double
return 0;
}
02 查询数组最大值函数模板
在举一个例子,下面的 MaxElement
函数定义成了函数模板,这样不管是 int、double、char 等类型的数组,都可以使用该函数来查数组最大的值,代码如下:
// 求数组最大元素的MaxElement函数模板
template
T MaxElement(T a[], int size) // size是数组元素个数
{
T tmpMax = a[0];
for(int i = 1;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?