1. 程式人生 > >過載,覆蓋和隱藏區別

過載,覆蓋和隱藏區別

1.過載(overload)的特徵:

a).幾個函式如果是過載,那麼他們的作用域相同,即在同一個範圍內。【例如:在同一個類中,或者在同一個全域性中】

b).函式名字必須相同,但是引數必須不同【個數可以不同,型別也可以不同】

c).virtual關鍵字可有可無.

【過載的作用就是同一個函式有不同的行為】

2.覆蓋(override)的特徵:

a).覆蓋指的是派生類的函式覆蓋基類的函式,因此範圍不同,一個是在基類,一個是在派生類中。

b).函式名字和引數都必須完全相同。

c).virtual關鍵字必須出現在基類的函式中。

【所謂的覆蓋指的是:用基類物件的指標或者引用訪問虛擬函式時會根據實際的型別決定所呼叫的函式】

3.隱藏(hide)的特徵:

a).派生類的函式隱藏(或者說是遮蔽)了與其同名的基類的函式。隱藏的理解:在呼叫一個類的成員函式的時候,編譯器會沿著類的繼承鏈逐級的向上查詢函式的定義,如果找到了,那麼就停止查找了。所以如果一個派生類和他的基類都有同一個同名(且不論其引數)的函式,而編譯器最終選擇了派生類中的函式,那麼就說派生類中的成員函式隱藏了基類中的成員函式,也就是說它阻止了編譯器繼續向上查詢的行為。

b).因為覆蓋中說到了基類中的函式存在了virtual關鍵字,且名字和引數都相同的情況下是覆蓋了,那麼隱藏的特點就是如下了:

    1).在派生類和基類中函式名相同,但引數不同(因為引數不同就不會構成了覆蓋的特點),所以,virtual關鍵字已經顯得不重要了,此時就只能構成隱藏了

    2).在派生類和基類中的函式名相同,引數相同,此時就要看virtual關鍵字了,要是沒有此關鍵字就構成隱藏了,有此關鍵字就是前面所說的覆蓋了。

總結:函式的覆蓋是發生在派生類與基類之間,兩個函式必須完全相同,並且都是虛擬函式。那麼不屬於這種情況的,就是隱藏了。

【覆蓋的函式是多型的,是存在vbtl中的函式才能構成覆蓋的關係;而隱藏的函式都是一般的函式,不支援多型,是在編譯階段就確定了的】

相關推薦

no