从基类方法调用虚方法

时间:2012-01-25 14:18:37

标签: 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的构造函数调用basefunction,它应该从派生类调用重写函数"override()"

但事实并非如此。它调用Base :: override()。我理解为什么调用这个函数,但是如何实现我的问题,basefunction从派生类调用override函数?

如果覆盖函数被定义为纯虚函数,则不允许使用main函数中的声明。

1 个答案:

答案 0 :(得分:3)

  • 是否可以向我们展示您使用的代码?你必须完成一个以便编辑。

  • 以明显的方式完成后,我得到了我期望的结果:显示“派生”。

  • 有些相关内容可能是你看到的问题,或者可能是无关的。在执行构造函数和析构函数期间,动态类型与构造函数/析构函数的类型相同。因此,如果你在Base()而不是Derived()中调用basefunction,实际上它是被调用的Base :: override而不是Derived :: override。在执行Base :: Base()期间,Derived的成员尚未构建,调用可以访问它们的成员会很危险。