函式多型(函式過載)使我們能夠使用多個同名的函式。「多型」是指有多種形式。函式多型允許函式有多種形式,函式過載是指可以有多個同名的函式,對名稱進行了過載。這兩個術語指的是同一件事。
可以通過函式過載來設計一系列函式——它們完成相同的工作,但使用不同的引數列表。
函式過載的關鍵是函式的引數列表——也成為函式特徵標(function signature)。c++允許定義名稱相同的函式,條件是它們的特徵標不同,如果引數數目或/和引數型別不同,則特徵標也不同。
使用被過載的函式式,需要在函式呼叫中使用正確的引數。
一些看起來不同的特徵標可能是不能共存的,例如:
double cube(double x);
double cube(double & x);
在呼叫時編譯器無法確定使用那個原型。為避免這種混亂,編譯器在檢查函式特徵標時,要把型別引用和型別本身視為同乙個特徵標。
匹配函式時,不區分const和非const變數。
特徵標相同但函式型別不同不能過載,例如下面兩個宣告是互斥的:
long gronk(int n, float m);
double gronk(int n, float m);
程式8.10
不要濫用函式過載,僅當函式執行相同的任務,但是用不同形式的資料時,才應採用函式過載。
C (四十二) 函式模板多型
1 函式模板 引數多型 相當於乙個函式發生器,引數多型,可以過載。普通函式和模板函式的本質區別 普通函式的呼叫,可以進行隱式的型別轉換 函式模板的呼叫,使用型別引數化,嚴格按照型別進行匹配,不會進行型別的自動轉換 乙個函式模板可以取代許多具體的函式定義,可以大大減少程式設計工作量。include i...
C核心技術手冊(四十二)
當編寫乙個c 程式時,首先要做的一件事是確定在多種c 的定義中遵循哪一種,gcc 的預設方言版本為 gnu c 它在很大程度上為iso iec 9899 1900 標準,以及它發布的勘誤表和許多語言擴充套件,這些擴充套件一部分已經包含在c99 中標準化了,例如複雜浮點型別和long long 整形,...
C核心技術手冊(四十二)
當編寫乙個c 程式時,首先要做的一件事是確定在多種c 的定義中遵循哪一種,gcc 的預設方言版本為 gnu c 它在很大程度上為iso iec 9899 1900 標準,以及它發布的勘誤表和許多語言擴充套件,這些擴充套件一部分已經包含在c99 中標準化了,例如複雜浮點型別和long long 整形,...