c++函数模块与其相关内容

一 函数的基本内容:
(1) 关于函数的定义:
通常分为有返回值与无返回值两类

                        void functionname( parameter list)
                        {
                                                statements ;
                                                return ;
                        }

                        void functionname( parameter list)
                        {
                                                statements ;
                                                return var ;
                        }

(2) 数组作为函数参数:

                        int fill_array(double ar [] , int limit );
                        int fill_array(double * ar  , int limit );
                        //           都是在传递数组的地址,这个是一维函数的传递方式

                        int fill_array( double (* ar)[5] , int limit );
                        int fill_array( double ar [ ][5] , int limit );
                        //           二维函数的传递方式

但在c++ 中用的更多的还是“超尾”的方法来实现的,也就是传递数组的首地址与尾地址来实现的,例如:

                                 int sum_arr ( const int * begin , const int * end )
                                 {
                                                     const int * pt ;
                                                     int total ; 

                                                     for ( pt = begin ; pt != end ; pt++ )
                                                     total = total + *pt ;

                                                     return total ;
                                }

(3) 使用const在参数中:
以下面的这个例子来表明const在函数参数中的作用。

                                        const int *  const pt = &age ;

其中第一个const表示pt所指向的那个数据是不可更改的;
而第二个const表明不可更改这个指针的指向。
(4)函数与array对象:

                            void show( std::array<double,5> da );
                            void show( std::array<double,5> * da );
                            //    使用的方式基本与数组相同 , 但是要注意一点
                            //    在使用指针时 da不同与数组那样是数组的地址,所以在使用时需要用
                            //    (* da)来解除指针

(5)关于函数指针:

                                        const double * ( *pa) ( const double * , int ) ;
                                        /*       
                                                            其中const double * 表示的是返回值的类型,
                                                            为double 类型的指针;
                                                            而(*pa) 则是表明这是一个函数的指针。
                                        */

                                        const double * ( *pa[3]) ( const double * , int ) ;
                                        //                         表示为一个函数指针的数组

二 函数的深入内容:

1   内联函数:
                    在任意函数声明或函数定义前加上关键字 inline ,那么这个函数就成为了内联函数。
                    内联的作用与c语言中的宏函数作用基本相同。

2   引用变量:
                                                    int   initial =    value ;
                                                    int & backup =  initial ;

            在此中引用变量与原变量共用同一个地址,也就是说他们访问的其实是同一个内存单元;
            在c++中使用引用这一特性,可以在函数减少一层指针的嵌套

            ***但注意一点***:
            当返回的类型为引用变量时需要注意绝不反回临时变量,因为此时临时变量在函数返回
            时已经被释放,而返回为引用,两者使用同一个内存地址。但由于已经被释放,此时已
            是非法访问。

3 默认参数:
            在函数的参数列表后加入 = value , 即设置了初始的值 ,如

            int     harpo ( int n  , int m = 6 , int j = 8) ;
            //       此时默认在参数没有传递时,m为6,j为8

4  函数重载与函数模板:
            (1)     所谓的重载就是同一个函数名有不同的功能。
                        函数重载只需要参数列表的类型不同则可实现

              (2)        使用模板:

                 template < typename T>
                 void Swap (T & a  , T  &b ){
                             T temp ;
                             T  = a ;
                             a  = b ;
                             b  = T ;
                    }
                    //        同样的函数模板也是可以重载的只要参数的列表构成不同即可。

                    在对结构体操作时需要对其使用显式声明
                    template<>   void  Swap<struct name >( name & j1 , name & j2 );

ps:
关于一些简单的数据格式化内容:
cout.setf( ......... ) // 添加入所需要的格式化方式
ios_base::fixed ios_base::showpoint
cout.precision(n) // 设置输出小数为n位
cout.width(n) // 设置下次输出的长度,仅作用一次,需要重复设置

猜你喜欢

转载自blog.51cto.com/13824643/2131946