C++預設參數

來源:互聯網
上載者:User

標籤:

在C++中,可以為參數指定預設值。在函數調用時沒有指定與形參相對應的實參時, 就自動使用預設參數。

預設參數的文法與使用:
(1)在函式宣告或定義時,直接對參數賦值。這就是預設參數;
(2)在函數調用時,省略部分或全部參數。這時可以用預設參數來代替。

注意:
(1)預設參數只可在函式宣告中設定一次。只有在沒有函式宣告時,才可以在函數定義中設定。(#add ,此句意為存在函式宣告和定義兩部分的時候。驗證表明有這個限制,可以隨便,但出於規範,在聲明中指定)
(2)如果一個參數設定了預設值時,其右邊的參數都要有預設值。(#add 這是定義時,類的成員函數的參數表在聲明時預設參數位於參數表右部, 使用時該怎樣待總結)
如:int mal(int a, int b=3, int c=6, int d=8)    正確,按從右至左順序設定預設值。
        int mal(int a=6, int b=3, int c=5, int d)   錯誤,未按照從右至左設定預設值。c設定預設值了,而其右邊的d沒有預設值。
(3)預設參數調用時,則遵循參數調用順序,自左到右逐個調用。這一點要與第(2)分清楚,不要混淆。(#add 神馬意思啊? 暫理解為兩個預設參數之間的參數必須賦預設值, 錯,意為調用函數時,從左至右第一個實參即為第一個形參的實參,依此類推)
如:void   mal(int a, int b=3, int c=5);      //預設參數
           mal(3, 8, 9 );                          //調用時有指定參數,則不使用預設參數
           mal(3, 5);                       //調用時只指定兩個參數,按從左至右順序調用,相當於mal(3,5,5);
              mal(3);                           //調用時只指定1個參數,按從左至右順序調用,相當於mal(5,3,5);
              mal( );                           //錯誤,因為a沒有預設值
              mal(3, , 9)                      //錯誤,應按從左至右順序逐個調用
再如: void mal(int a=8, int b=3, int c=5);      //預設參數
               mal( );                                                      //正確,調用所有預設參數,相當於mal(8,3,5);

(4)預設值可以是全域變數、全域常量,甚至是一個函數。但不可以是局部變數。因為預設參數的調用是在編譯時間確定的,而局部變數位置與預設值在編譯時間無法確定。

 

 

最典型的就是在帶預設參數的建構函式:

    比如說你定義了一個class A;    A有兩個private資料成員int a;和int b;   如果不是用預設的建構函式的話代碼如下:

 

   

 

     A();           //不帶參數的建構函式

 

     A(int a,int b);//帶參數的建構函式

 

 

 

     如果你在建立對象時,如初始化

 

     A a1;         //初始化調用A();

 

     A a2(3,4);    //賦值調用A(int a,int b);

 


     而如果使用帶預設參數的建構函式時就不需要不帶參數的建構函式了(使用帶預設參數的建構函式就相當於上面兩個建構函式都寫);如下:

 

     A(int a=0,int b=0);

 

    

 

     則不需要在寫出不帶參數的建構函式了;因為你如果這樣定義對象:

 

     A a1;           //調用的還是A(inta=0,int b=0)因為編譯器就不再產生預設的建構函式A();而是直接調用A(int a=0,int b=0)

 

                 //因為沒有實參的建構函式,是預設建構函式,參數指定了預設值的建構函式也是預設建構函式,一個類只能有一個預設建構函式

 

 

 

        這裡要說明的是一個類在寫了預設建構函式之後就不會自動產生預設的建構函式,如果你寫的是帶預設參數的建構函式,則其實已經有了預設建構函式

 

C++預設參數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.