Обязательно ли переопределять виртуальные методы класса в наследнике наследника, если нет как этого избежать?

Есть класс

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

→ Ссылка