Заставить все классы реализовать / переопределить «чисто виртуальный» метод в иерархии многоуровневого наследования

В С ++ почемучистый virtual Метод обязывает его принудительное переопределениетолько его непосредственным детям (для создания объекта), но не внукам и так далее?

struct B {
  virtual void foo () = 0;
};
struct D : B {
  virtual void foo () { ... };
};

struct DD : D {
  // ok! ... if 'B::foo' is not overridden; it will use 'D::foo' implicitly
};

Я не вижу ничего особенного в том, чтобы не использовать эту функцию.
Например, с точки зрения языкового дизайна, возможно, чтоstruct DD разрешено использоватьD::foo только если он имеет какое-то явное утверждение, какusing D::foo;, В противном случае он должен переопределитьfoo обязательно.

Есть ли практический способ получить этот эффект в C ++?

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

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