Абстрактный класс наследует другой абстрактный класс с тем же именем функции

 class subscriber
{
public:
virtual void update() = 0;
}

class entity : public subsriber
{
public:
virtual void update() = 0;
}

class myObject : public entity
{
public:
virtual void update()
{
do_things();
}
}

subscriber * ptr = new myObject; //will use shared_ptr, but here i want simplicity

ptr->update();

Вопрос в том, будет ли вызвана правильная функция обновления (реализованная в myObject)? И допустимо ли иметь две чистые виртуальные функции с одинаковыми именами в одной «семье»?

4

Решение

будет вызвана правильная функция обновления (реализованная в myObject)?

Да, это будет называться.

допустимо ли иметь две чистые виртуальные функции с одинаковыми именами в одной «семье»?

Вторая декларация (т.е. внутри entity класс) не вводит в семью вторую чисто виртуальную функцию: подписи идентичны, поэтому update() это одна виртуальная функция. Более того, объявлять его во второй раз не обязательно: entity будет оставаться абстрактным, и будет иметь доступ к update() метод, даже если вы удалили второе объявление.

5

Другие решения

Виртуальная функция или виртуальный метод — это функция или метод, поведение которых может быть переопределено в классе наследования функцией с той же сигнатурой.

Так что ответ да.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector