Обязательно ли переопределять виртуальные методы класса в наследнике наследника, если нет как этого избежать?
Есть класс
class Abstract {
public:
virtual void somemethod() = 0;
}
class ConcreteChild : public Abstract {
public:
void somemethod() { ..code.. };
}
class ConcreteGrandsone : ConcreteChild {
public:
void somemethode2();
}
Если в ConcreteGrandsone не переопределяю somemethod то класс получается абстрактным.
В классе ConcreteGrandsone метод somemethod должен вести себя так же как и в ConcreteChild его обязательно переопределять как void somemethod() {ConcreteChild::somemethod();}, или есть способ наследования конкретного поведения этого метода?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Если в ConcreteGrandsone не переопределяю somemethod то класс получается абстрактным.
Нет, если это вопрос :)
Если вы это сделаете — не определите
void somemethod() { ..code.. };
в ConcreteChild, то да, этот класс будет абстрактным. Но наследник конкретного класса
class ConcreteGrandsone : ConcreteChild {
по этой причине абстрактным не будет. Убедитесь: https://ideone.com/4mvIl6