C++进阶之函数模板
我们知道C++中有函数重载这个概念,函数重载的功能就是把一个函数重写多次使其可以具有多种类型的参数。简单的来说就是用同一种函数名定义多个函数,这些函数的参数个数和参数类型不同。
利用函数模版就可以更简单的来实现不同函数的参数需求。其实函数模版和函数重载是非常相似的 唯一的区别就是 函数重载需要写多个函数,而函数模版只需要写一个函数模版(特殊的函数)就可以在调用的时候匹配随意类型的参数了!
举个例子:
我们需要写一个求最大值函数(max()):
max(int a,int b,int x){ if(a>b){x=a; }else{x=b; } return x; }
这样我们就可以计算出 整型的(int)最大值了,但是又出现了另外的一个问题就是 如果是这样声明函数的话 我们就必须声明多种类型的函数,也就是说这一种 int 类型的函数只适用于int型的数据才能起作用。如果是double long 等类型就不适用了。如下:
max(dobule a,ouble b,double x){ if(a>b){x=a; }else{x=b; } return x; }
当然我们可以定义多个函数来实现,但是这样就会有太多的冗余代码。所以我们就必须运用到函数模版来解决这个问题:
#include "stdafx.h" #include <iostream> #include <cmath> using namespace std; template <class T> // T 表示一种类型 这里表示为定义的函数类型 所以习惯了使用 T(Type) 来表示。 T max(T a,T b,T c){ if(a>b){ c=a; }else { c=b; } return c; } int main(){ int i=0; double d=0; int x=1,y=2,z=0; double q=1.1,w=2.2,e=0; i=max(x,y,z); d=max(q,w,e); cout<<"i="<<i<<endl; cout<<"d="<<d<<endl; return 0; }
格式为:
1. template <typename T>
通用函数定义
2. template <class T>
通用函数定义
这样一来就可以解决同样功能的函数处理不同类型的参数了!
大家将此例子敲完就可以理解 函数模版的意思了!我就不过多的解释了。
总结一句话:“函数摸吧 就是使同意功能的函数适应不同 参数类型”


浙公网安备 33010602011771号