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

看板C_and_CPP (C/C++)作者 (眠月)時間16年前 (2009/03/10 21:14), 編輯推噓1(107)
留言8則, 4人參與, 最新討論串1/3 (看更多)
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

03/10 21:19, , 1F
Meyers是在他的書裡說,這是為了避免你意外地繼承
03/10 21:19, 1F

03/10 21:19, , 2F
重載函式,尤其是當Base和Derived很疏遠的時候
03/10 21:19, 2F

03/10 21:21, , 3F
而且你這個例子是叫overriding嗎?沒有virtual的話
03/10 21:21, 3F

03/10 21:22, , 4F
不是就只是單純地遮蔽而己?
03/10 21:22, 4F

03/10 21:23, , 5F
好像叫redefining ... 吧?
03/10 21:23, 5F

03/10 21:28, , 6F
obj.B::foo(); // if you insist
03/10 21:28, 6F

03/10 22:01, , 7F
對,了解,多謝……
03/10 22:01, 7F

03/12 23:06, , 8F
應該是因為overriding優先,而overload要另外看
03/12 23:06, 8F
文章代碼(AID): #19jcVAWZ (C_and_CPP)
文章代碼(AID): #19jcVAWZ (C_and_CPP)