我创建了一个父类,它调用它自己的虚拟成员。但是这个虚拟成员被子类覆盖。
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执行代码(开始调试)时,它调用子方法,但是当我直接运行可执行文件时,它调用父方法。我在这里做错了吗?
答案 0 :(得分:0)
如果函数没有做任何事情(或做同样的事情),你怎么知道当你直接运行可执行文件时它会调用父方法?
让2个函数实际上做了不同的事情 - 如果函数相同,编译器可能会“合并”函数(尽管我希望在调试版本中不太可能发生这种函数)。
如果这个答案毫无意义,请发布一个精确的(copy-n-paste)可编辑片段,以便我们可以准确地看到发生了什么。