从基类方法调用虚拟方法

Calling a virtual method from a base class method

本文关键字:虚拟 方法 调用 类方法 基类      更新时间:2023-10-16

我想从派生类调用的基类方法中调用一个重写的方法:

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,而不是Derive::overwrite。在执行Base::Base()的过程中,Derived的成员尚未构造,调用可以访问它们的成员是危险的。