C++基础5:函数和函数指针

            从函数本身来说,重点掌握函数的参数、返回类型。

            从函数种类来说,重点掌握内联函数、重载函数。

           1.函数形参

              形参分为非引用形参和引用形参。

             a.非引用形参

                 非引用形参很简单,主要是注意有几种情况不适合使用非引用形参。

                 1). 类型本身不能复制或赋值,例如 IO类型

                 2). 实参对象本身很大,例如容器对象

                 3). 当需要在函数中修改参数值时

             b.引用形参或指针形参

                 这两种形参相当于都是传递的参数本身地址,在引用形参中值得注意的是数组参数的传递,因为数组之间不能相互赋值,所以,数组只能用指针或引用的方式传递参数。

                 数组形参的3种形式:

                 1). 传递数组第一个元素的地址,并传递数组长度

                       一维数组:int a[5];     void fun(int* array, int length);

                       二维数组:int a[4][5]; void fun(int (*array)[5], int rowsize); 

                 2). 传递数组第一个元素和最后一个元素的地址

                 3). 用引用传递,在用指针传递参数时,在方括号中的表示数据长度的值不起作用,但在引用中,这个值是起作用的。

                       例如:void fun(int* array[5]); 当传递来一个数组时,程序不会检查传递过来的数组长度是不是5, 

                                   void fun(int &array[5]);程序会检查传递过来的数组长度是否为5

               c. 无论是引用形参还是非引用形参,都可以是const形参,如果形参前面有const修饰符,那么在函数中不能修改参数的值。

               d. 可变函数参数

                   void fun(int a, ……)

                f. 默认实参

                   在确定函数的默认实参时,最好在头文件中声明函数时就确定,那么在定义函数时不需要再指出,否则,产生重复定义编译错误。

            2. 函数的返回值

               在这节中,需要重点掌握的是用引用返回左指。

               当返回类型为引用或指针时,不能返回局部变量的引用或地址。

               int& fun(int &a[1000], int location)

               {

                         return a[location];

               }

             3. 内联函数

                在函数前面标注inline,此函数则为内联函数。

                使用内联函数的好处是:

                1). 可在头文件中定义内联函数,便于使用,维护和修改

                2). 使用内联函数减少了函数调用时程序的开销。

              4. 重载函数

                  参数类型、个数不同,但函数名称相同的函数称为重载函数。

                  a. 容易混淆的函数重载情况

                  1). 非引用形参,const形参和非const形参相同,不能认为是函数重载。

                        void fun(int a);

                        void fun(const int a);

                   2). 有默认实参的函数和没有默认实参的同名函数不能认为是函数重载。

                        void fun(int a);

                        void fun(int a = 10);

                    3). const引用形参/指针 和非const引用形参/指针 不同,是函数重载

                         void fun(int a);

                         void fun(int &a);

                    b.重载函数和作用域

                       在小作用域中如果有和大作用域中重载函数重名的函数,那么小作用域中的函数将屏蔽大作用域中的函数。

                       例如:

                        void fun(int a);

                        void fun(double a);

                        main()

                        {

                                void fun(char a);

                               int c = 0;

                                fun(c);//fun(char a)

                        }

                      c.重载函数和参数匹配

                        1). 选出候选函数,参数个数相同,参数类型可转换

                        2). 找出可精确匹配的函数,如果找不出,则进行参数类型转换。

                             转换原则:内置类型内部提升优先

                                                 其次,标准转换

                                                 最后,类类型转换

                        3)如果有2个以上函数可匹配,则产生二义性。

                    5.函数指针

                       声明: 返回类型 (*p) (参数列表)

                                     int (*p)(double a, char b);  一个指向返回类型为int, 参数列表为double, char型的函数的函数指针。

                       初始化:

                                     int fun(double a, char b);

                                     p = fun;

                                     p = &fun;

                        调用:double k = 5;  char l = 'a';

                                    p(k, l);

                        指向重载函数的函数指针,必须明确指明参数类型,一个函数指针只能指向重载函数中的某一个函数。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值