Вызов виртуального метода из метода базового класса - PullRequest
4 голосов
/ 25 января 2012

Я хочу вызвать переопределенный метод из метода базового класса, вызванного производным классом:

class Base {
    Base();
    virtual void function override() {}
    void basefunction() {
        override();
    }

class Derived : public Base {
    Derived() {
        basefunction();
    }
    virtual void function override() {
        cout << "derived" << endl;
    }
}

main() {
    Base* d = new Derived();
}

Конструктор Derived вызывает базовую функцию, которая должна вызвать переопределенную функцию "override()" из производногокласс.

Но это не так.Он вызывает Base :: override ().Я понимаю, почему вызывается эта функция, но как я могу реализовать мою проблему: базовая функция вызывает функцию переопределения из производного класса?

Если функция переопределения определена как чисто виртуальная, объявление в главной функциине допускается.

1 Ответ

3 голосов
/ 25 января 2012
  • Можно ли показать нам код, который вы используете? Тот, который вы даете, должен быть заполнен, чтобы его можно было скомпилировать.

  • Когда все завершено очевидным образом, я получаю ожидаемый результат: отображение «производного».

  • Есть что-то, что может быть проблемой, которую вы видите, или это может быть не связано. Во время выполнения конструктора и деструктора динамический тип совпадает с типом конструктора / деструктора. Так что если у вас есть вызов basefunction в Base (), а не в Derived (), то на самом деле вызывается Base :: override, а не Derived :: override. Во время выполнения Base :: Base () члены Derived еще не были созданы, и было бы опасно вызывать члена, который мог бы получить к ним доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...