Re: [問題] overriding 遮蔽 overloading 的原因?

看板C_and_CPP (C/C++)作者 (洞房不敗)時間16年前 (2009/05/27 09:42), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《yoco315 (眠月)》之銘言: : class B { : void f () ; : void f (int) ; : } ; : class D : B { : void f (int) ; : } ; : main () { : D d ; : d.f () ; // error : } : error 的原因是找不到函數, : 我想問的不是原因,我知道是被遮蔽了, : 我想問的是:為什麼 C++ 要這樣設計? : 為什麼當 override 一個函數的時候, : 要遮蔽所有同名的其他版本? : 今天同事問我,我還真想不到 @"@ : 先感謝。 爬文查資料的時候剛好看到這篇,測試後推出一點結果,大家有空看看對不對。 (編譯器只有用 Visual C++ 2008 測過) 不考慮虛擬函數的狀況(virutal) 1. 子類別有相同名稱之函數時,繼承自父類別的所有同名函數都不會被覆蓋消失。 2. 函數繼承後,命名空間以子類別為主。因此父類別所有同名函數,都一定要 用完整名稱才能正確存取,如「子物件.父類別::函數名」。 3. void f(int) 用 public宣告,且 class D : public B {}; 才不會存取錯誤。 -- 原推文中版友提到可能叫重新定義,但實際用程式測試,用 d.f(1); 跟 d.B::f(1); 分別都可跑B、D類別中定義的void f(int),所以應該不算一種重新定義? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.8.129.19
文章代碼(AID): #1A79fkfS (C_and_CPP)
文章代碼(AID): #1A79fkfS (C_and_CPP)