任务描述
本关任务:编写一个求两个数的和的函数模板。
相关知识
为了完成本关任务,你需要掌握:
什么是C++函数模板;
C++函数模板的例子。
函数模板
C++提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类,其类内部的类型和函数的形参类型不具体指定,用一个虚拟的类型来代表。这种通用的方式称为模板。模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。
举个例子,比如我们要写一个函数,求两个数字的和,我们需要为求两个整数的和写一个函数,又需要为求两个浮点数的和写一个函数。函数的实现基本相同,唯一的区别是参数的类型不同。
那么,能不能再抽象一点,把参数的类型也设置为可以传入的呢?答案是可以,这就是函数模板。
函数模板的写法如下:
template <class 类型参数1, class类型参数2, ...>
返回值类型 模板名(形参表)
{
函数体
}
其中的 class 关键字也可以用 typename 关键字替换。
一个函数函数模板的例子
比如,求一组数中的最大值,既需要支持整数,也需要支持浮点数,我们来看下怎么使用函数模板来实现:
#include <iostream>
using namespace std;
template <class T>
//求一个数组中的最大值
T MaxElement(T a[], int size) //size是数组元素个数
{
T tmpMax = a[0];
for (int i = 1; i < size; ++i)
if (tmpMax < a[i])
tmpMax = a[i];
return tmpMax;
}
int main()
{
int a[5] = { 1,5,2,3,4 };
float b[5] = { 1.1,5.5,2.2,3.3,4.4 };
cout << MaxElement(a, 5) << endl;
cout << MaxElement(b, 4) << endl;
return 0;
}
T 是类型参数,代表类型。编译器由模板自动生成函数时,会用具体的类型名对模板中所有的类型参数进行替换,其他部分则原封不动地保留。同一个类型参数只能替换为同一种类型。编译器在编译到调用函数模板的语句时,会根据实参的类型判断该如何替换模板中的类型参数。
可以看到,整数数组和浮点数数组,我们都正确的计算到了最大值,说明函数模板起到了作用。
编程要求
根据提示,在右侧编辑器Begin和End之间补充代码,实现一个函数getSum,用来计算并且返回两个数的和,要求使用函数模板来支持各种类型的入参。
测试说明
平台会给出多组入参,调用你编写的函数,将计算结果和正确的结果进行对比,从而判断你的程序是否正确。
测试输入:
0 1 2
其中,第一个数字如果是0,表示输入的是整数,1表示浮点数。(这段逻辑测试脚本中会处理)
预期输出:
input is integer:
1
2
3
开始你的任务吧,祝你成功!
微信公众号: