我想从派生类调用的基类方法中调用重写的方法:
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()。我明白为什么调用此函数,但我如何实现我的问题,即基函数从派生类调用覆盖函数?
如果覆盖函数被定义为纯虚函数,则不允许在主函数中声明。
最佳答案
能否向我们展示您正在使用的代码?您提供的那个必须完成才能被编译。
以明显的方式完成后,我得到了预期的结果:显示“派生”。
有一些相关的东西可能是您看到的问题,也可能是不相关的。在构造函数和析构函数执行期间,动态类型与构造函数/析构函数的类型相同。因此,如果您在 Base() 中而不是在 Derived() 中调用 basefunction,那么实际上调用的是 Base::override 而不是 Derived::override。在 Base::Base() 执行期间,Derived 的成员尚未构造,调用可以访问它们的成员是危险的。
关于c++ - 从基类方法调用虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9004159/