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

看板C_and_CPP作者 ( )時間15年前 (2009/03/10 23:48), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《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
B(d).f() 和 ((B*)&d)->f() 的語意完全不同啊!
03/11 08:18, 1F

03/11 08:19, , 2F
另外我想 yoco 問的重點不是在 public
03/11 08:19, 2F

03/11 12:56, , 3F
找不到名稱跟沒權限存取不一樣,這提我測試也是找不到函式.
03/11 12:56, 3F

03/11 12:56, , 4F
C++ 是做完 name lookup 才檢查是否有權限存取~
03/11 12:56, 4F
文章代碼(AID): #19jelC14 (C_and_CPP)
文章代碼(AID): #19jelC14 (C_and_CPP)