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,它应该从派生类调用重写的函数
但它没有。它调用base::override()。我理解为什么调用这个函数,但是如何实现我的问题,即baseFunction从派生类调用override函数?
如果重写函数被定义为纯虚函数,则不允许在主函数中声明。
是否可以向我们展示您正在使用的代码?你提供的必须完成才能编译。
当以显而易见的方式完成时,我得到了我期望的结果:显示"派生"。
有些事情是相关的,可能是你看到的问题,或者是无关的。在构造函数和析构函数的执行过程中,动态类型与构造函数/析构函数的类型相同。因此,如果您在base()中而不是在derived()中调用了baseFunction,那么实际上它是被调用的base::override,而不是derived::override。在执行base::base()的过程中,派生的成员尚未构造,调用可以访问它们的成员是危险的。