关于c ++:从基类方法调用虚方法

Calling a virtual method from a base class method

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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();
}

派生的构造函数调用baseFunction,它应该从派生类调用重写的函数"override()"

但它没有。它调用base::override()。我理解为什么调用这个函数,但是如何实现我的问题,即baseFunction从派生类调用override函数?

如果重写函数被定义为纯虚函数,则不允许在主函数中声明。


  • 是否可以向我们展示您正在使用的代码?你提供的必须完成才能编译。

  • 当以显而易见的方式完成时,我得到了我期望的结果:显示"派生"。

  • 有些事情是相关的,可能是你看到的问题,或者是无关的。在构造函数和析构函数的执行过程中,动态类型与构造函数/析构函数的类型相同。因此,如果您在base()中而不是在derived()中调用了baseFunction,那么实际上它是被调用的base::override,而不是derived::override。在执行base::base()的过程中,派生的成员尚未构造,调用可以访问它们的成员是危险的。