1. 程式人生 > >c++函數模塊與其相關內容

c++函數模塊與其相關內容

backup != for wap sum c語言 In initial 例如

一 函數的基本內容:
(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) // 設置下次輸出的長度,僅作用一次,需要重復設置

c++函數模塊與其相關內容