我想从派生类调用的基类方法中调用重写方法:
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函数中的声明。
答案 0 :(得分:3)
是否可以向我们展示您使用的代码?你必须完成一个以便编辑。
以明显的方式完成后,我得到了我期望的结果:显示“派生”。
有些相关内容可能是你看到的问题,或者可能是无关的。在执行构造函数和析构函数期间,动态类型与构造函数/析构函数的类型相同。因此,如果你在Base()而不是Derived()中调用basefunction,实际上它是被调用的Base :: override而不是Derived :: override。在执行Base :: Base()期间,Derived的成员尚未构建,调用可以访问它们的成员会很危险。