c++学习笔记八

来源:互联网 发布:淘宝订单怎么重新拆分 编辑:程序博客网 时间:2024/06/07 03:00
函数


  1 函数的重载: 函数名相同,参数个数不同
               参数个数相同,参数类型不同
   函数的签名
   重载和指针参数
          例如:int temp(int * pnum1,int * pnum2);
                int temp(long * pnum1,long * pnum2);
   重载和引用参数
   重载和const参数
  2 函数模板
     一个简章的函数模版
      template<class T> T larger(T a, T b)
{
  //函数体
}
      创建模版的实例        
      larger(1.5,2.5);  
      显示指定模板参数板
      larger<long>(num1,num2);
      模板说明
      template<> long * larger<long*> (long * a,long * b)
          {
return *a>*b?a:b;
          }
      函数模板重载
       long * larger(long * a,long * b);
      
     带多个参数的函数模板 (第二个参数为模板的返回类型)
      template <TReturn, class TArg> TReturn larger(TArg a,TArgb)
      {return a>b?a:b;}
      非类型的模板参数
         例如(检查值的作用域):
           template(class T,int upper,int lower) bool isin_range(T value)
            {
return (value<=upper)&&(value>=lower);
}
   3 函数指针
       可用类和函数的重载来替代此功能
       声明函数指针
           例如(pFun指向一个函数,有两个参数long* 和int,返回值为long)
       格式如下:
                返回类型(指针名)(参数列表)
                long (* pFun)(long *, int);
        在使用函数指针调用函数之前,必需先初始化函数指针
           代码如下:
                long test(long * num1,int num2);
                 pFun=test;
        在使用函数指针的时候就跟使用函数名是一样的
        
        把函数作为参数传送 
            例如:函数原型
                  double sum_array(double array[],int length,double(*pfun)(double));
        函数指针的数组
             例如:
                 double fun1(double,double);
  double fun2(double,double);
                 double fun3(double,double);
                 double (*pfun)(double,double)={fun1,fun2,fun3};
     4 递归
         例如计算一个数的阶乘
          long function(long n)
{
if(1==n)
{
return n;
}
return n*function(n-1);
       }
        实现递归排序