[C/C++] 重載函式 (Overloaded function) - 上

摘要:[C/C++] 重載函式 (Overloaded function) - 上

概念:

所謂的重載函式是將語意、功能相似的函式用同樣的函式名表示。而這些不同的函式透過傳入不同的參數型態或個數以及回傳值來自動辨別。

 

目的:

1. 提高函式的易用性。

2. class的constructor必須要overloaded:因為C++規定constructor必須與class同名,為了讓class可以有不同的方法建立Object,增加創建object的彈性。

 

誤用:


void foo (void);
int foo (void);

注意上面的程式範例會造成compiler error,因為C/C++可以省略回傳值,所以會造成compiler無法辨識要使用哪一個函式。

以下顯示compile結果:

error: new declaration ‘int foo()’

error: ambiguates old declaration ‘void foo()’

 

C++呼叫C的函式:


void foo (int x)

假設C有一函式如上,被編譯過後會變成_foo,但在C++中編譯會變成_foo_int之類的名稱來支援重載。

由於編譯命名規則不同,所以C++無法直接呼叫C函式。為了解決這個問題,C++提供了extern 這個keyword來解決這個問題。如下:


extern "C"
{
   void foo(int x);
}

用來告知C++ compiler將foo()當作C函式庫處理。