Наследование - обязательно ли переопределять все виртуальные функции?
Есть базовый абстрактный класс:
class Duck{
protected:
FlyBehavior *flyBehavior;
QuackBehavior *quackBehavior;
public:
Duck () {}
virtual void display() = 0;
virtual void performFly() = 0;
virtual void performQuack() = 0;
virtual void swim() = 0;
};
Есть класс-наследник:
class MallardDuck : public Duck
{
public:
MallardDuck(){
quackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
void display() {
std::cout << "I'm a real Mallard duck" << std::endl;
}
void performFly() {
Duck::performFly();
}
void performQuack() {
Duck::performQuack();
}
void swim() {
Duck::swim();
}
};
Вопрос в следующем: как сделать так, чтобы функции не приходилось переопределять в дочернем классе, но при этом сохранилось родительское поведение в случае, если функция не переопределена?
Т.е. мне нужно, чтобы было возможно, не трогая родительский класс, переопределить функцию в дочернем, а до тех пор, пока функция не переопределена, выполнялась родительская. Или добавить в родительскую функцию, которая выполнялась бы во всех дочерних без изменений в них. Это возможно?
Ответы (1 шт):
Автор решения: tirariharari
→ Ссылка
Если методы будут не абстрактными, но виртуальными их переопределять не надо.