看板 C_and_CPP 關於我們 聯絡資訊
class B { void f () ; void f (int) ; } ; class D : B { void f (int) ; } ; main () { D d ; d.f () ; // error } error 的原因是找不到函數, 我想問的不是原因,我知道是被遮蔽了, 我想問的是:為什麼 C++ 要這樣設計? 為什麼當 override 一個函數的時候, 要遮蔽所有同名的其他版本? 今天同事問我,我還真想不到 @"@ 先感謝。 -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.105.56
legnaleurc:Meyers是在他的書裡說,這是為了避免你意外地繼承 03/10 21:19
legnaleurc:重載函式,尤其是當Base和Derived很疏遠的時候 03/10 21:19
legnaleurc:而且你這個例子是叫overriding嗎?沒有virtual的話 03/10 21:21
legnaleurc:不是就只是單純地遮蔽而己? 03/10 21:22
legnaleurc:好像叫redefining ... 吧? 03/10 21:23
jaw109:obj.B::foo(); // if you insist 03/10 21:28
yoco315:對,了解,多謝…… 03/10 22:01
blackwindy:應該是因為overriding優先,而overload要另外看 03/12 23:06