過載函式的過載確定過程

2021-06-29 07:59:51 字數 1082 閱讀 7321

最近在找工作的過程中,發現很多平時沒有注意的問題,反省之後,決定好好把基礎知識過一過。

過載函式的定義:出現在相同作用域中的兩個函式,如果具有相同的名字而形參表不同,則稱為過載函式。

這裡有兩個地方需要注意:同乙個作用域,形參表不同。形參表不同的意思就是形參個數不同,或者引數型別不同。

過載確定分三步:

1.確定候選函式。即確定與呼叫函式相關的過載函式集合,該集合中的函式就是候選函式。候選函式與被呼叫函式同名,並且在呼叫點上,它的宣告可見。舉個例子。

void f();

void f(int);

void f(int,int);

void f(double,double = 3.14);

f(5.6);

呼叫函式為f(5.6);一共有4個候選函式。

需要注意的是,在呼叫點上,候選函式的宣告可見。舉個例子。

void print(const string&);

void print(double);

void foobar(int ival)

在foobar函式中,宣告了函式void print(int),這導致外面的兩個函式對裡面呼叫print函式來說,都是不可見的,因此,print("value: ");是錯誤的,print(3.14);是對的,因為3.14可以轉換為int型。在這裡,外面的兩個print函式不是候選函式,因為他們對呼叫點來說不是可見的。

2.選擇可行函式。選擇可行函式必須滿足兩個條件:第一,函式的形參個數與該呼叫的實參個數相同。第二,每乙個實參的型別必須與對應形參的型別匹配,或者可被隱式轉換為對應的形參型別。那麼對於f(5.6)來說,可行函式為

void f(int);

void f(double,double = 3.14);

3.尋找最佳匹配函式。即在可行函式中尋找與實際引數最佳匹配的函式。匹配的原則是實參型別與形參型別越接近則匹配越佳。那麼這裡的最佳匹配函式為void f(double,double = 3.14); 當沒有找到最佳匹配函式的時候,或者找到兩個最佳匹配函式的時候,編譯器會報錯。

mysql 函式過載 C 方法過載(函式過載)

在講解 c 構造方法 時提到定義構造方法時提到可以定義帶 0 到多個引數的構造方法,但構造方法的名稱必須是類名。實際上,這就是乙個典型的方法過載,即方法名稱相同 引數列表不同。引數列表不同主要體現在引數個數或引數的資料型別不同。在呼叫過載的方法時系統是根據所傳 遞引數的不同判斷呼叫的是哪個方法。例項...

函式的過載

在面向過程的程式設計模式下,程式被劃分為資料結構 函式,這也就是那句著名的 程式 資料結構 演算法 的由來 在面向過程的思考方式下,函式名就是最好的標識,而名稱組織良好的函式集合是判斷 是否優美的乙個重要因素 在物件導向的思考方式下,一切都不同了 常見的情況下,應該為不同的函式起不同的名字,但是當這...

函式的過載

在程式設計時,有時我們要實現的是同一類的功能,只是有些細節不同 例如希望從3個數中找出其中的最大者,而每次求最大數時資料的型別不同,可能是3個整數 3個雙精度數或3個長整數 程式設計者往往會分別設計出3個不同名的函式,其函式原型為 int max1 int a,int b,int c 求3個整數中的...