Функция скрыта функцией с тем же именем в подклассе (но с другой подписью). Вы можете отобразить его с помощью оператора using, как при использовании A :: DoSomething ();

от вопрос уже есть ответ здесь:

Функция с тем же именем, но другой подписью в производном классе 2 ответа

Учитывая следующий пример, почему я должен явно использовать операторb->A::DoSomething() а не простоb->DoSomething()?

Разве компилятор не должен выяснить, о каком методе я говорю?

Я использую Microsoft VS 2005. (Примечание: в этом случае использование virtual не помогает.)

class A
{
  public:
    int DoSomething() {return 0;};
};

class B : public A
{
  public:
    int DoSomething(int x) {return 1;};
};

int main()
{
  B* b = new B();
  b->A::DoSomething();    //Why this?
  //b->DoSomething();    //Why not this? (Gives compiler error.)
  delete b;
  return 0;
}

Ответы на вопрос(2)

Ваш ответ на вопрос