作者elba ( )
看板C_and_CPP
标题Re: [问题] overriding 遮蔽 overloading 的原因?
时间Tue Mar 10 23:48:27 2009
※ 引述《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
1F:推 littleshan: B(d).f() 和 ((B*)&d)->f() 的语意完全不同啊! 03/11 08:18
2F:→ littleshan:另外我想 yoco 问的重点不是在 public 03/11 08:19
3F:→ firose:找不到名称跟没权限存取不一样,这提我测试也是找不到函式. 03/11 12:56
4F:→ firose:C++ 是做完 name lookup 才检查是否有权限存取~ 03/11 12:56