overload 重載 VS override 覆蓋

成員函數被重載的特徵:    
  (1)相同的範圍(在同一個類中);    
  (2)函數名字相同;    
  (3)參數不同;    
  (4)virtual關鍵字可有可無。    
  覆蓋是指派生類函數覆蓋基類函數,特徵是:    
  (1)不同的範圍(分別位於派生類與基類);    
  (2)函數名字相同;    
  (3)參數相同;    
  (4)基類函數必須有virtual關鍵字。    
  “隱藏”是指派生類的函數屏蔽了與其同名的基類函數,規則如下:    
  (1)如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。    
  (2)如果派生類的函數與基類的函數同名,並且參數也相同,但是基類函數沒有virtual關鍵字。此時,基類的函數被隱藏(注意別與覆蓋混淆)。  
   
  現在我分析一下它們在內存的存儲情況:  
  1、函數的重載與函數的覆蓋不同,重載不是子類對父類的同名函數的重新定義,而是類對自身已有的同名函數的重新定義.  
  2、函數的覆蓋中不僅覆蓋了父類的函數,同進也把父類的同名函數在子類的內存空間清除掉;但在子類變量的隱藏中屏蔽了父類的變量,可是父類的變量在子類中仍然佔有一下的內存空間。



覆蓋就是虛函數的覆蓋。沒有覆蓋,虛函數就沒有意義了。虛函數只是用virtual說明的成員函數,覆蓋纔是其真正的目的。  
  隱藏不一定有什麼特殊的用處,只是一種現象。比如兩個窗口類A、B,A是B的基類,定義了Create方法,B也定義了Create方法(這樣的主要目的 是統一接口名稱),這時就出現了隱藏。兩個類的Create方法參數可以不一樣,做的事情也可以完全不同,也不可能聲明爲virtual,這就是隱藏的例 子了。

發佈了3 篇原創文章 · 獲贊 0 · 訪問量 1512
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章