У меня есть следующая иерархия классов в C ++:
class Base {
virtual void apply() = 0;
};
class Derived : public Base {
virtual void apply() {
// implementation here that uses derived_specialty
}
virtual void derived_specialty() = 0;
};
class Implementation : public Derived {
virtual void derived_specialty() {
// implementation
}
};
Я хотел бы гарантировать, что классы на уровне реализации не предоставляют свою собственную реализацию apply, и что они реализуют только производную_специальность. Есть ли способ гарантировать, что классы, наследуемые от Derived, не будут реализованы apply, чтобы использовалась реализация Derived :: apply? Насколько я понимаю, в C ++ метод, сделанный виртуальным в базовом классе, является виртуальным на всем протяжении иерархии наследования, но если в C ++ есть какие-то хитрости, мне было бы интересно узнать о них.
Я всегда удивляюсь тому, что разрешено в C ++, поэтому я подумал, что стоит спросить. :)