天天看點

14_詳解函數的預設(預設)參數1、預設參數概述2、注意:3、占位參數

1、預設參數概述

c++在聲明函數原型的時可為一個或者多個參數指定預設(預設)的參數值,當函數調用的時候如果沒有傳遞該參數值,編譯器會自動用預設值代替。

//函數的預設參數 指定x的預設值為10 y為20
int my_add(int x=10,int y=20)
{
    return x+y;
}
void test02()
{
    //如果函數傳參 那麼各自的預設參數将無效
    cout<<"my_add = "<<my_add(100,200)<<endl;//300

    //如果某個參數未被傳參 将啟用預設值x=100 y使用預設值20
    cout<<"my_add = "<<my_add(100)<<endl;//120

    //x=10  y=20
    cout<<"my_add = "<<my_add()<<endl;//30
}
           

2、注意:

1、函數的預設參數從左向右,如果一個參數設定了預設參數,那麼這個參數之後的參數都必須設定預設參數

//函數的預設參數從左向右
int func01(int x,int y=20,int z=30)
{
    return x+y+z;
}
void test03()
{
    cout<<func01(100,200)<<endl;//330
    cout<<func01(100)<<endl;//150
    //cout<<func01()<<endl;//err x沒有設定預設參數 必須傳參
}
           

2、如果函數聲明和函數定義分開寫,函數聲明和函數定義不能同時設定預設參數

建議:函數聲明出設定預設參數

fun.cpp

int func02(int x,int y,int z)
{
    return x+y+z;
}
           

main.cpp

//分檔案 函數定義處的預設參數 是無效的
//建議:分檔案是 在聲明 給預設參數
extern int func02(int x,int y=25,int z=35);
//extern int func02(int x,int y,int z);//err
void test04()
{
    cout<<func02(100,200)<<endl;//335
    cout<<func02(100)<<endl;//160
}
           

3、占位參數

函數的參數隻有類型名 沒有形參名,這個參數就是占位參數

由于有類型名 是以 函數調用的時候 必須給占位參數傳參。

由于沒有形參名 是以 函數内部 是無法使用占位參數。

void func03(int x,int y,int)
{
    cout<<"x = "<<x<<", y = "<<y<<endl;
    return;
}
void test05()
{
    //func03(10,30,"hehe");//err "hehe"和int類型不符
    func03(10,30,40);
}
           

繼續閱讀