传值函数:
int Abc(int a, int b, int c){return a+b+b*c+(a+b-c)/(a+b)+4;
}
模板函数:
template<class T> T Abc(T a, T b, T c){ return a+b+b*c+(a+b-c)/(a+b)+4; }
形式参数的用法会增加程序的运行开销
类型T 的复制构造函数把相应的实际参数分别复制到形式参数a,b和c之中,以供函数使用;而在函数返回时,类型
T的析构函数会被唤醒,以便释放形式参数a,b和c
1: template<class T>2: T Abc(T& a, T& b, T& c){3: return a+b+b*c+(a+b-c)/(a+b)+4;
4: }
引用参数(reference parameter)
在函数被调用时,本程序并没有复制实际参数的值,在函数返回时也没有调用析构函数。
常量引用参数
常量引用(const reference),这种模式指出函数不得修改引用参数。
1: template<class T>2: T Abc(const T& a, const T& b, const T& c)3: {4: return a+b+b*c+(a+b-c)/(a+b)+4;
5: }
使用关键字const 来指明函数不可以修改引用参数的值,这在软件工程方面具有重要的意。这将立即告诉用户该函数并不会修改实际参数。
对于诸如i n t、float 和char 的简单数据类型,当函数不会修改实际参数值的时候我们可以采用传值参数;对于所有其他的数据类型(包括模板类型),当函数不会修改实际参数值的时候可以采用常量引用参数。
template<class Ta, class Tb, class Tc > Ta Abc (const Ta& a, const Tb& b, const Tc& c) { return a+b+b*c+(a+b-c)/(a+b)+4; }
递归函数(recursive function)是一个自己调用自己的函数
累加求和
1: template<class T>2: T Sum(T a[], int n){
3: / /计算a[0: n-1]的和4: T tsum=0;5: for (int i = 0; i < n; i++){6: tsum += a[i];7: }8: return tsum;
9: }
递归求和:
template<class T> T Rsum(T a[], int n){ / /计算a[0: n-1]的和 if (n > 0) return Rsum(a, n-1) + a[n-1]; return 0; }