Обеспечить виртуальность сторонних методов

Я расширяю класс, предоставляемый библиотекой третьей части. Класс, назовем его Foo , имеет метод reset () , который можно вызвать для перезапуска поведения Foo . Метод reset () также используется внутри класса.

class Foo
{
  public:
    void reset () {
        /* ... */
    }
    void something () {
        reset();
    }
};

Пока что мне нужно перегрузить метод reset () , чтобы также сбросить мои дополнительные функции:

class Bar : public Foo
{
  public:
    void reset() {
        /* ...something... */
        Foo::reset();
    }
};

К сожалению, поскольку метод Foo :: reset () не виртуальный, вызывая Bar :: something () , я получаю Foo :: reset () Метод вызывается вместо Bar :: reset () .

Есть ли способ (отличный от перегрузки Foo :: something () ), чтобы вернуть его назад -virtual?

7
задан Dacav 31 August 2010 в 15:03
поделиться

2 ответа

Вы не можете расширять классы, которые не предназначены для расширения.

5
ответ дан 6 December 2019 в 21:08
поделиться

Вы не можете сделать reset() виртуальным в своей библиотеке таким образом, чтобы он влиял на базовый класс без изменения кода базового класса. Во-первых, компилятор не добавил необходимый бухгалтерский код, позволяющий выполнять виртуальные вызовы reset().

3
ответ дан 6 December 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: