Почему статический метод переопределяет нестатический метод базового класса?

struct B {
  void foo () {}
};

struct D : B {
  using B::foo;
  static void foo () {}
};

int main ()
{
  D obj;
  obj.foo();  // calls D::foo() !?
}

Метод-член и статический метод-член полностью различаются по двум причинам:

  1. статический метод не переопределяет виртуальные функции в базовом классе
  2. Сигнатура указателя функции для обоих случаи разные

Когда метод вызывается объектом, разве метод-член не должен иметь более высокое логическое предпочтение? (Просто C ++ позволяет вызывать метод static с использованием объекта, будет ли он рассматриваться как замещенный метод ?)

11
задан iammilind 16 June 2011 в 06:39
поделиться