函式(四) 函式過載

2021-10-07 08:52:14 字數 1387 閱讀 1132

《基於 c++ primer p206>

1.定義過載函式

(1)對於過載的函式,應該在形參數量或形參型別上有所不同。

形參名是否相同,同一型別的不同別名,返回值型別是否相同不能用於區別過載函式。

(2)特別的,頂層 const 不影響傳入函式的物件,乙個擁有頂層 const 的形參無法和另乙個沒有頂層 const 的形參區別開來。但對於底層 const 形參,可喲通過區分其指向的是常量物件還是非常量物件實現函式過載。

(3)函式過載可以在一定程度上減輕我們為函式起名字的負擔,但是應當只過載那些確實十分相似的操作。有時,為函式起不同的名字能使得程式更易理解。

(4)const_cast 和過載

const string &

shortstring

(const string &s1,

const string &s2)

string &

shortstring

(string &s1, string &s2)

2.呼叫過載函式

函式匹配也叫做過載確定,可能發生三種可能:

①找到最佳匹配;②無匹配,錯誤;③二義性呼叫,錯誤;

(1)確定候選函式和可行函式

①候選函式的特徵:與被調函式同名,其宣告在呼叫點可見。

②可行函式的特徵:形參數量與呼叫函式提供實參數量相等,每個實參的型別與對應的形參型別相同,或可以型別轉換。

③如果函式含有預設實參,則我們在呼叫該函式時傳入的實參數量可能少於它實際使用的實參數量。

(2)尋找最佳匹配

實參型別與形參型別匹配的越接近,它們匹配的越好。

最佳匹配的特徵:該函式每個實參的匹配都不劣於其他可行函式需要的匹配,至少有乙個實參的匹配優於其他可行函式提供的匹配。

(3)實參型別轉換

呼叫過載函式時應盡量避免強制型別轉換。如果在實際應用中確實需要強制型別轉換,則說明我們設計的形參集合不合理。

實參型別轉換到形參型別的轉換等級:

①精準匹配,包括:

實參型別和形參型別相同;

實參從陣列或函式型別轉換成對應的指標型別;

向實參新增頂層 const 或者從實參中刪除頂層 const;

②通過 const 轉換實現的匹配;

③通過型別提公升實現的匹配;

④通過算術型別轉換或指標轉換實現的匹配。所有算術型別轉換的級別都一樣。

⑤通過類型別轉換實現的匹配。

3.函式與作用域

(1)一般而言,將函式宣告置於區域性作用域內不是乙個明智的選擇。

(2)函式過載對作用域的一般性質並沒有什麼改變,如果我們在內層作用域中宣告名字,它將隱藏外層作用域中宣告的同名實體,在不同的作用域中無法過載函式名。

(3)在 c++ 中,名字查詢發生在型別檢查之前。

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

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

函式之過載函式

由於過載函式都是同名的,編譯器如何解析過載函式呢?發現函式 void print int i 編譯之後為 注意它的函式簽名變為 z5printi 利用反彙編技術,發現函式void print int i 編譯之後,它的函式簽名為 z5printi void print string str 編譯之後...

函式過載(函式多型)

函式的預設引數可以令我們使用具有不同引數數目的同乙個函式,而函式多型可以令我們使用多個相同名稱的函式。多型指的是多種形式,函式多型允許函式具有多種形式。c 使用上下文來確定使用的過載函式版本。1.c 允許定義名稱相同的函式,前提是他們的特徵標不同,即引數數目或引數型別不同。例如,定義一組原型如下的函...