简单掌握C++中的函数模板

yizhihongxing

简单掌握C++中的函数模板

函数模板为不同的数据类型提供了一种通用的代码实现方式,可以减少代码量,提高代码复用性。本文将介绍在C++中如何通过函数模板简单实现对不同数据类型的计算,并提供两个实例供参考。

定义模板函数

我们可以通过关键字template来定义模板函数,具体方式如下:

template <typename T>
T add(T a, T b){
    return a+b;
}

函数名为add<typename T>表示定义了一个通用的类型T,函数的两个参数都为类型T,函数返回值也是类型T。这样一来,我们就可以通过这个函数模板来实现intfloat等类型的加法操作了。值得注意的是,函数模板的实现并不是真的实现,而是C++编译器根据实际情况在编译时生成的。

调用模板函数

模板函数的调用方式和普通函数一样,只是需要指定具体的类型,如下:

int a = 5, b = 10;
float c = 1.5, d = 2.5;
// 调用add函数
cout << add(a,b) << endl; // 输出15
cout << add(c,d) << endl; // 输出4

在调用时,我们需要指定add函数的具体类型,这里分别为intfloat。这样编译器就会根据上面提供的函数模板生成对应的代码进行运算。

实战演练

示例一

现在我们有一个数组,需要计算出每一个元素平方的和。针对不同的数据类型,采用不同的方式进行计算。代码如下:

#include <iostream>
using namespace std;

template <typename T>
T sumOfSquare(T arr[], int n){
    T sum = 0;
    for(int i = 0; i < n; i++){
        sum += arr[i] * arr[i];
    }
    return sum;
}

int main(){
    int arr1[] = {1,2,3,4,5};
    float arr2[] = {1.1,2.2,3.3,4.4,5.5};
    double arr3[] = {1.1,2.2,3.3,4.4,5.5};
    cout << "sum of int: " << sumOfSquare(arr1, 5) << endl;
    cout << "sum of float: " << sumOfSquare(arr2, 5) << endl;
    cout << "sum of double: " << sumOfSquare(arr3, 5) << endl;
    return 0;
}

在上面的代码中,我们定义了一个sumOfSquare函数模板,用于计算对数组元素平方的和。由于不同数据类型的数组元素类型不同,我们使用了typename T来定义通用类型,并在函数中用T代替具体类型。

main函数中,我们创建了三个不同类型的数组,分别为intfloatdouble。通过调用sumOfSquare函数模板计算了这三个数组元素平方的和,结果如下:

sum of int: 55
sum of float: 55.55
sum of double: 55.55

可以看出,我们通过函数模板简单地实现了对不同数据类型的计算。

示例二

再来看一个例子,现在我们分别有intfloat类型的两个变量,需要将它们分别乘以2并输出结果。代码如下:

#include <iostream>
using namespace std;

template <typename T>
void doubleValue(T &x){
    x *= 2;
}

int main(){
    int a = 5;
    float b = 1.5;
    // 调用函数模板
    doubleValue(a);
    doubleValue(b);
    // 输出结果
    cout << "a: " << a << endl; // a: 10
    cout << "b: " << b << endl; // b: 3
    return 0;
}

在上面的代码中,我们定义了一个doubleValue函数模板,用于将传入的参数乘以2,此处需要使用引用(&)将传入的参数作为函数返回。在main函数中,我们创建了两个不同类型的变量,通过调用doubleValue函数模板将它们都乘以2,并输出结果。运行结果如下:

a: 10
b: 3

可以看出,我们通过函数模板简单地实现了对不同数据类型的操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简单掌握C++中的函数模板 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 如何给随机数加密

    下面是如何给随机数加密的完整攻略,共分为以下几个步骤: 步骤一:生成随机数 首先需要生成一个随机数,可以使用编程语言自带的随机数生成器函数或第三方库生成。注意,生成的随机数应该具有高度的随机性和不可预测性。 这里以 PHP 语言为例,使用 random_int() 函数生成一个 0 到 100 的随机整数: $random_num = random_int(…

    C 2023年5月23日
    00
  • Sublime Text 3 实现C语言代码的编译和运行(示例讲解)

    下面我将详细讲解一下“Sublime Text 3 实现C语言代码的编译和运行(示例讲解)”的完整攻略。 前提条件 在开始这个攻略之前,我们需要做好以下准备工作: 安装Sublime Text 3; 安装C语言编译器; 在Sublime Text 3中安装Package Control; 安装Package Control Package Control 是…

    C 2023年5月23日
    00
  • CCleaner Pro怎么激活?CCleaner专业版注册破解激活教程(附下载)

    CCleaner Pro激活攻略 1. 下载CCleaner专业版安装文件 首先,你需要下载CCleaner专业版安装文件。你可以在官方网站上下载安装文件,也可以在其他下载站点上下载。注意,要下载专业版,而不是免费版。 下载完成后,双击安装文件并按照提示进行安装。 2. 获取CCleaner专业版注册码 在你安装CCleaner专业版后,你将需要注册码来激活…

    C 2023年5月23日
    00
  • iOS之异常与信号使用场景分析

    iOS之异常与信号使用场景分析 异常 什么是异常 异常是指运行期间发生错误,导致应用程序不能正常执行的事件,例如:数组越界访问、空指针引用等。在OC中,异常时指通过在方法内部 raise 一个异常对象实例来表示异常事件的。 异常处理 在OC中,我们可以通过以下两个关键字来处理异常: @try: 被检测的代码中可能发生异常的部分需要放在这个语句块里; @cat…

    C 2023年5月23日
    00
  • 详解C++中的const关键字及与C语言中const的区别

    详解C++中的const关键字及与C语言中const的区别 const 基础知识 在 C++ 中,const 关键字表示“常量”,即标识符被定义为只读的,不可修改的量。定义常量的格式如下: const <type> <name> = <value>; 其中,<type> 可以是任何 C++ 数据类型,<n…

    C 2023年5月23日
    00
  • C++你最好不要做的几点小结

    以下是“C++你最好不要做的几点小结”的完整攻略。 C++你最好不要做的几点小结 1. 不要忘记初始化 C++中未初始化的变量是具有未定义值的,如果试图使用未初始化的变量,将会导致不可预知的结果。因此,在使用变量之前,一定要初始化。对于内建类型,可以使用默认值进行初始化,例如: int a = 0; // 将a初始化为0 bool b = false; //…

    C 2023年5月22日
    00
  • MongoDB导出查询结果到文件例子

    MongoDB导出查询结果到文件主要有两种方式:使用mongoexport命令和使用db.collection.find().forEach()方法,下面分别进行讲解: 使用mongoexport命令导出查询结果到文件 语法: mongoexport -d <database_name> -c <collection_name> -q…

    C 2023年5月23日
    00
  • C语言中的函数指针学习笔记

    现在为大家介绍一下“C语言中的函数指针学习笔记”的完整攻略。 什么是函数指针? 函数指针(Function Pointer)是指向函数的指针变量,也就是说,函数指针指向函数的入口地址。 函数指针的定义 函数指针的定义格式如下: typedef int (*func_ptr)(int, int); // func_ptr是一个函数指针类型 上面代码定义了一个名…

    C 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部