Re: [問題] overriding 遮蔽 overloading 的原因?
※ 引述《yoco315 (眠月)》之銘言:
: class B {
: void f () ;
: void f (int) ;
: } ;
: class D : B {
: void f (int) ;
: } ;
: main () {
: D d ;
: d.f () ; // error
: }
: error 的原因是找不到函數,
: 我想問的不是原因,我知道是被遮蔽了,
: 我想問的是:為什麼 C++ 要這樣設計?
: 為什麼當 override 一個函數的時候,
: 要遮蔽所有同名的其他版本?
: 今天同事問我,我還真想不到 @"@
: 先感謝。
class B {
public:
void f () ;
void f (int) ;
} ;
class D : public B {
void f (int) ;
} ;
main () {
D d ;
B(d).f(); // 或((B*)&d)->f();
}
跟override或overload沒有關係.
如果把class B 中的void f()改成void g(),
還是一樣會有錯誤.
加上public在一些編譯器(eclipse+cdt+mingw,vc)裡頭才不會有警告和錯誤
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.9.55
推
03/11 08:18, , 1F
03/11 08:18, 1F
→
03/11 08:19, , 2F
03/11 08:19, 2F
→
03/11 12:56, , 3F
03/11 12:56, 3F
→
03/11 12:56, , 4F
03/11 12:56, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):