函式過載與函式模板的區別

工程師WWW發表於2013-10-21

《C++程式設計》一書上抄下來的,自己常常混淆,所以記錄一下加深印象。

—————————————————————————————————————————-

函式的過載:

C++允許用同一函式名定義多個函式,這些函式的引數個數和引數型別不同。這就是函式過載。

過載函式的引數個數、引數型別或引數順序3者中必須至少有一種不同,函式返回值型別可以相同也可以不同。

函式模板:

所謂函式模板。實際上是建立一個通用函式,其函式型別和形參型別不具體指定,用一個虛擬的型別來代表。這個通用函式就稱為函式模板。凡是函式體相同的函式都可以用這個模板來代替,不必定以多個函式,只需在模板中定義一次即可。

template <typename T>            //模板宣告。template的含義是“模板”。關鍵字typename或class表示“型別名”。其中T為型別引數,型別引數可以不只一個,可以根據需要確定個數。

T max (T a,T b,T c)                       //定義一個通用函式,用T作虛擬的型別名

模板只適用於函式體相同、函式的引數個數相同而型別不同的情況,如果引數的個數不同,則不能用函式模板。

—————————————————————————————————————————–

總結:

方法 返回值型別 引數個數 引數型別 引數順序 函式體
過載 可同也可不同 必須有一種不同 不同
模板 相同 相同 不同 相同 相同

相關文章