作者yoco315 (眠月)
看板C_and_CPP
標題[問題] overriding 遮蔽 overloading 的原因?
時間Tue Mar 10 21:14:48 2009
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