C++ では、純粋な 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++ でこの効果を得る実用的な方法はありますか?