C ++ вызывает дочерний виртуальный член из родительского виртуального члена - PullRequest
0 голосов
/ 17 августа 2010

Я создаю родительский класс, который вызывает своего собственного виртуального члена. Но этот виртуальный член переопределяется дочерним классом.

class Parent {
public:
    void doSomething() {
        doVirtual();
    }
protected:
    virtual void doVirtual() {}
};

class Child : public Parent {
protected:
    virtual void doVirtual() {}
};

Parent *c = new Child();
c->doSomething();

И скомпилируйте его с Visual Studio 2008, мой вопрос: Когда я выполняю код из IDE (начало отладки), он вызывает дочерний метод, но когда я запускаю исполняемый файл напрямую, он вызывает родительский метод. Я что-то здесь не так делаю?

1 Ответ

0 голосов
/ 17 августа 2010

Если функции ничего не делают (или делают то же самое), как вы узнаете, что когда вы запускаете исполняемый файл напрямую, он вызывает родительский метод?

Пусть две функции на самом деле делают что-то другое - компилятор может «объединять» функции, если они идентичны (хотя я ожидаю, что в отладочной сборке это будет менее вероятно).

Если этот ответ не имеет смысла, опубликуйте точный (copy-n-paste) скомпилированный фрагмент, чтобы мы могли точно видеть, что происходит.

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