c++ - 从基类方法调用虚方法

标签 c++ virtual-functions derived-class

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

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/

相关文章:

c++ - "ask which exact type an object has"是否总是表明设计不好?

c++ - 从具有基类函数的派生类打印

c++ - boost 变体 istringstream 和流错误

c++ - 找出函数、lambda 或函数的返回类型

c++ - 派生的、具体的、类的虚表

c++ - 充斥着标识符错误

python - 为什么从字典派生的类不显示包含键

c++ - 在 Linux 中双击运行 OpenGL 程序

c++ - 如何定义与使用 lambda 兼容的函数指针并将捕获作为回调

c++ - GCC 看不到通过多重继承实现