C++ 模板常见特性(函数模板、类模板)

您所在的位置:网站首页 99围棋级别对照表 C++ 模板常见特性(函数模板、类模板)

C++ 模板常见特性(函数模板、类模板)

2022-12-18 23:44| 来源: 网络整理| 查看: 265

背景

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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3