C++之“函數”

函數的定義和聲明
一、函數原型的聲明原則:
    1、如果函數定義在先,調用在後,則調用前可以不必聲明;如果調用在先,定義在後,則調用前必須聲明。
    2、一般將主要的函數放在程序的起始位置聲明。
    3、函數原型聲明規則:
        與定義類似,但是聲明是一條語句,所以必須以分號結尾。
        函數原型中的返回類型、函數名和形參必須與定義該函數時完全一致。

函數的調用
一、函數的調用形式
    1、函數調用是一個表達式,函數名連同括號是函數調用運算符。
    2、如果函數的返回值爲void,說明該函數沒有返回值。
    3、主函數main()不需要進行原型聲明,也不允許任何函數調用它,它只由操作系統調用並返回操作系統。

二、函數參數之間的調用:
    1、實參與形參有三種結合方式:    
            傳值調用:調用時,實參僅僅將其值賦給形參,實際上,在函數中對形參值的任何修改都不會影響到實參的值。
            eg:對於函數:
                void zy(int  a,int  b)
                {
                   int t;
                    t=a,a=b,b=t;
                }
                當x=1,y=2時,調用函數zy(x,y);此時結果:x=1,y=2
        
        傳地址調用:調用時,實參是將地址進行賦值,形參的改變實際上是改變的所對應地址的值。這樣一來,調用函數之後實參也會隨之改變。
        eg:對於1中的函數,當x=1,y=2時,調用函數zy(x,y);此時結果則是:x=2,y=1
        
        引用調用:引用調用與傳地址調用的結果是一樣的,其區別就在於引用調用實際上是實參取了一個別名,這樣對形參的任何操作也就會直接作用於實參。
         eg:對於1中的函數,當x=1,y=2時,調用函數zy(x,y);此時結果與傳地址調用相同:x=2,y=1
        2、嵌套調用:在一個函數中調用其他函數的過程。除了main()外,其他函數都可以互相調用。注意:函數不可以嵌套定義,但可以嵌套調用。
        3、遞歸調用;在一個函數過程中直接或間接的調用函數本身。其中又分爲直接調用和間接調用。

內聯函數
    內聯函數是指用inline關鍵字修飾的函數。在類內定義的函數被默認成內聯函數。程序執行過程中調用內聯函數不需要入棧出棧,所以效率會提高。

帶默認形參值的函數
    此類函數爲形參預賦了一個默認的值。
    特點:
            1、在默認形參值的右邊不能有未指定的默認值參數,默認形參值必須要從右至左的連續定義。
    eg:void F(float  a,int  b=4,float  c=5);
            2、默認形參值的說明必須出現在函數調用之前。
            3、對於同一作用域不能在定義已經定義了的默認形參。
            4、形參默認值可以是初始化表達式、函數調用。

函數重載
        同一個函數名可以對應着多個函數的實現。
        特點:函數名相同形參的個數和類型卻可以不同。
        注意:重載函數與帶默認形參值的函數 一起使用可能引起二義性。

函數模板
        將邏輯功能相同而函數參數和函數值類型不同的多個重載函數用一個函數來描述,大大提高了代碼的可重用性和軟件的開發效率。
        特點:
                1、以template關鍵字來聲明模板。
                2、參數表存放於<>內
                3、class可以作爲類型的關鍵字也可以作爲typename的關鍵字。
                4、返回值類型可以是普通類型,也可以是模板參數表中指定的類型。
               
            eg:template<class T>
                    T    sub(T   x,T   y)
                    {
                            return     x-y;
                       }    


    


發佈了56 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章