Возможный дубликат:
имя скрывается и хрупкая базовая проблема
Я знаком с правилами, связанными со скрытием функции-члена. В принципе, производный класс с функцией, которая имеет то же имя, что и функция базового класса, фактически не перегружает функцию базового класса - она полностью скрывает ее.
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
. Но мой вопрос: в чем причина скрытия функции базового класса? Является ли это "особенностью" или просто "ошибкой" комитета по стандартам? Есть ли какая-то техническая причина, по которой компилятор не может выглядеть в классе Base для соответствия перегрузок, если он не находит соответствия для d.foo(123)
?