可能重复:
名称隐藏和脆弱的基本问题
我熟悉涉及成员函数隐藏的规则.基本上,具有与基类函数同名的函数的派生类实际上不会重载基类函数 - 它完全隐藏它.
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!
}
Run Code Online (Sandbox Code Playgroud)
所以,您可以通过using声明解决这个问题.但我的问题是,基类函数隐藏的原因是什么?这是标准委员会的"特征"还是"错误"?是否存在一些技术原因导致编译器在找不到匹配项时无法在Base类中查找匹配重载d.foo(123)?
c++ ×1