C ++从父虚拟成员调用子虚拟成员

时间:2010-08-17 04:35:51

标签: c++ visual-studio-2008 virtual-method

我创建了一个父类,它调用它自己的虚拟成员。但是这个虚拟成员被子类覆盖。

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 :(得分:0)

如果函数没有做任何事情(或做同样的事情),你怎么知道当你直接运行可执行文件时它会调用父方法?

让2个函数实际上做了不同的事情 - 如果函数相同,编译器可能会“合并”函数(尽管我希望在调试版本中不太可能发生这种函数)。

如果这个答案毫无意义,请发布一个精确的(copy-n-paste)可编辑片段,以便我们可以准确地看到发生了什么。