c++從入門到精通——函數重載
在同一個作用域內,可以聲明幾個功能類似的同名函數,但是這些同名函數的形式參數(指參數的個數、類型或者順序)必須不同。您不能僅通過返回類型的不同來重載函數。
實現函數重載的條件
- 同一個作用域
- 參數個數不同
- 參數類型不同
- 參數順序不同
void func()
{
cout << "無參數的func" << endl;
}
void func(int a )
{
cout << "有參數的func(int a)" << endl;
}
void func(double a)
{
cout << "有參數的func(double a)" << endl;
}
void func(double a , int b)
{
cout << "有參數的func(double a ,int b)" << endl;
}
void func(int a, double b)
{
cout << "有參數的func(int a ,double b)" << endl;
}
測試
void test01()
{
//func(1.1,3);
func(1, 3.14);
}
結果
有參數的func(int a ,double b)
注意,返回值不作爲函數重載依據
思考:爲什麼函數返回值不作爲重載條件呢?
當編譯器能從上下文中確定唯一的函數的時,如int ret = func(),這個當然是沒有問題的。然而,我們在編寫程序過程中可以忽略他的返回值。那麼這個時候,一個函數爲
void func(int x);另一個爲int func(int x); 當我們直接調用func(10),這個時候編譯器就不確定調用那個函數。所以在c++中禁止使用返回值作爲重載的條件。
引用和const
//引用的重載版本
void func3(int &a) //引用必須要引合法的內存空間
{
cout << " int &a" << endl;
}
void func3(const int &a) //const也是可以作爲重載的條件 int tmp = 10; const int &a = tmp;
{
cout << "const int &a" << endl;
}
運行
void test03()
{
int a = 10;
func3(a);
}
輸出int &a
。
void test03()
{
func3(10);
}
輸出const int &a
。