Заставить все классы реализовать / переопределить «чисто виртуальный» метод в иерархии многоуровневого наследования
В С ++ почемучистый 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 ++?