В C++, почему чистыйvirtual
метод предписывает его обязательным наиважнейшая только его непосредственных детей (для создания объекта), но не внукам и так далее?Force все классы для реализации/переопределения «чистый виртуальный» метод в иерархии наследования многоуровневой
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++?
Вы можете указать бит 'foo' в отдельный класс и потребовать, чтобы каждый класс наследовал непосредственно от него (в частном порядке). –
Это не дает ничего подобного (если я не ошибаюсь). Он требует, чтобы любой объект, который был создан, должен быть класса, который не имеет никаких неопределенных виртуальных методов. –
@iammilind: Извините, я до сих пор не уверен, что вы имеете в виду. Нет ничего особенного в отношении непосредственных детей по сравнению с другими потомками. Может быть, пример того, почему вы думаете, что внуки разные. –