函式過載 函式覆蓋以及函式隱藏

2021-05-22 01:31:56 字數 856 閱讀 1809

函式過載:

是指允許存在多個同名函式,而這些函式的參數列不同(或許引數個數不同,或許引數型別不同,或者兩者都不相同),函式過載是發生在同乙個類中。呼叫時,根據引數的不同進行呼叫。同時編譯器在編譯期間就確定了要呼叫的函式,或者說這是一種早期繫結。同時,函式過載與多型無關。

函式覆蓋:有的書也稱為函式重寫(override)是指子類重新定義基類虛函式的方法

構成函式覆蓋的條件是:

(1)基類的函式必須是虛函式(使用virtual關鍵字進行宣告)

(2)發生覆蓋的兩個函式要分別位於派生類和基類中。

(3)函式名稱與引數列表完全相同。

由於c++多型性是通過虛函式來實現的,所以函式覆蓋總是和多型聯絡在一起的。並且是程式執行時才確定要呼叫的函式,這是動態繫結,或者稱為後期繫結。

函式隱藏:是指子類中具有和父類(基類)同名的函式,但並不考慮引數列表是否相同,從而在子類中隱藏了父類的同名函式。

函式隱藏有以下情況:

(1)子類函式和父類函式完全相同(函式名和引數列表完全相同),只是基類的函式沒有使用virtual關鍵字,此時基類的函式將被隱藏。

(2)子類函式與父類函式名相同,但是引數列表不同,在這種情況下,無論父類的函式是否宣告為virtual,父類的函式都將被隱藏。

舉例如下:

上述程式就是一種典型的函式覆蓋。

執行結果是:

fish bubble

當我們把父類的breathe函式前的virtual去掉,再次執行程式,發現結果為:fish bubble

但是此時是函式隱藏。

另外,當函式隱藏發生時,如果在子類的同名函式中想要呼叫基類的被隱藏函式,可以使用「基類名::函式名(引數)」的語法形式。

現舉例如下:

函式過載 overload ,函式覆蓋,函式隱藏

一 函式過載 overload 1.發生條件 同乙個類中的成員函式之間 任意兩個函式之間 2.形式 函式名稱相同,但引數型別不同,或引數的個數不同 3.備註 以下兩種情形不構成函式過載 a.int fun1 int a,void fun2 int a,函式名稱相同,引數型別相同,引數個數相同,只有函...

函式過載 覆蓋與隱藏

overload 翻譯過來就是 超載,過載,過載,超出標準負荷 override 翻譯過來是 重置,覆蓋,使原來的失去效果。先來說說過載的含義,在日常生活中我們經常要清洗一些東西,比如洗車 洗衣服。儘管我們說話的時候並沒有明確地說用洗車的方式來洗車,或者用洗衣服的方式來洗一件衣服,但是誰也不會用洗衣...

函式過載 隱藏與覆蓋

出現在相同作用域中的兩個函式,如果具有相同的名字而形參表不同,則稱為過載函式。作用 省去了為函式起名並記住函式名字的麻煩,簡化了程式的實現,使程式更容易理解。注意 main函式不能過載 函式不能僅僅基於不同的返回值型別而實現過載 進行函式過載時,要求同名函式在引數個數上不同,或者引數型別上不同 區域...