请考虑以下代码:
class Base
{
public:
virtual void f1( int var, bool val ) {/*some implementation*/}
virtual void f1( int var, int val ) {/*some implementation*/}
};
class Derived : public Base
{
public:
void f1( int var, int val ) {/*new implementation*/}
};
如果我创建一个新的派生对象:
Derived* newObj = new Derived();
并致电f1:
newObj->f1(5, true);
为什么它会调用Derived的f1,将bool转换为int?很明显,参数不匹配,并且在基类中有一个更合适的候选者(加入int和bool的基函数)。为什么从基础覆盖重载的虚函数会隐藏其他实现?