c++中的覆蓋和隱藏是乙個很容易混淆的概念
(1)從字面上來理解,
覆蓋的意思是,派生類把基類的那個函式給蓋住了,基類的函式在派生類中已經不存在了。當乙個派生類的物件初始基類的指標時,呼叫的是派生類的函式。
隱藏的意思是,雖然現在看不到,但是並不表明不存在。只是暫時被藏起來了而已,所以如果將乙個子類的物件賦值給乙個基類的指標,那麼用該指標呼叫對應的成員函式時,次數呼叫的是被子類隱藏了的對應的父類的成員函式。
(2)以上給出了覆蓋與隱藏的直觀區別,下面給出兩者的使用區別:
覆蓋與隱藏都是是相對於兩個類而言(即父類和子類),兩者使用區別如下:
覆蓋:(1)函式名,引數相同,有virtual關鍵字父類的該成員函式才會覆蓋對應子類的成員函式。
隱藏:隱藏有兩種情況
情況1:函式名,引數相同,但是沒有virtual關鍵字,才是會隱藏;
情況2:函式名同但是引數不同,此時不管有無virtual關鍵字,子類的該成員函式都會被父類隱藏。
(3)從結果上區分兩者的區別
現在將乙個子類的物件賦值給父類的指標,就覆蓋而言,函式的選擇取決於指向的物件是誰;而對隱藏而言,函式的選擇取決於指標是誰,也就是說在隱藏的情況下,指標可以將隱藏的狐狸尾巴給揪出來。
基於以上三點點,c++中的覆蓋和隱藏就很容易區分了。
值得一提的是,c++中還有函式過載的概念, 函式的過載與上面最主要的區別在於,過載函式的作用域是相同的,也就是說,當成員函式發生過載時,各個過載函式必定位於同乙個類中,這樣就很容易區分過載與前兩者的區別。
C 中的過載 覆蓋和隱藏的區分
c 中經常用到過載 覆蓋和隱藏這三個概念,也經常容易搞混。所以,這篇博文來整理一下它們之間的異同。1.過載 實現多型性 a 相同的範圍 同乙個類中 b 函式的名字相同 c 引數型別不同 不能進行隱式型別轉換 d virtual關鍵字可有可無 2.覆蓋 重寫 派生類函式覆蓋基類函式 a 不同的範圍 分...
C 中的過載 覆蓋和隱藏的區分
今天看書遇到了c 中比較難纏的概念,就是過載 覆蓋和隱藏。如果只要區分過載和覆蓋,相信應該沒有什麼難度,並且它們的界限還是比較清晰的。現在加上了隱藏,初次看這些概念還真是不好區分。下面總結一下它們之間的區別 成員函式的 b color red 過載 color b 的特徵有以下4點 1 必需在相同的...
C 中的覆蓋 過載與隱藏
c 中類本身之間的函式關係與基類和子類之間的函式關係有 覆蓋 過載與隱藏。1 覆蓋 c 中在基類用virtual定義的函式在子類中重新定義,此時稱為覆蓋,即子類對父類函式的覆蓋。2 過載 同乙個類中定義了多個同名但其形參不同的函式,這些同名函式之間為過載。3 隱藏 函式的隱藏有兩種情況。第一,如果派...