可能重复:
名称隐藏和脆弱的基础问题
我熟悉涉及成员函数隐藏的规则。基本上,具有与基类函数同名的函数的派生类实际上并没有重载基类函数——它完全隐藏了它。
struct Base
{
void foo(int x) const
{
}
};
struct Derived : public Base
{
void foo(const std::string& s) { }
};
int main()
{
Derived d;
d.foo("abc");
d.foo(123); // Will not compile! Base::foo is hidden!
}
因此,您可以通过using
声明来解决此问题。但我的问题是,基类函数隐藏的原因是什么?这是标准委员会的“功能”还是仅仅是“错误”?当编译器找不到匹配的重载时,编译器无法在基类中查找匹配的重载是否存在某种技术原因d.foo(123)
?