这里提出了一个非常相似的问题: C++:重写由另一个方法调用的受保护方法
但是,我想知道如何重写基类中的回调函数,以便另一个方法可以从构造函数而不是基类的回调调用派生类的回调。
我在下面举了一个例子:
#include <iostream>
class Base {
protected:
virtual void callback() {
std::cout << "Base" << std::endl;
}
public:
Base() {
callback();
}
};
class Derived : Base {
protected:
void callback() override {
std::cout << "Derived" << std::endl;
}
public:
// Use Base's constructor to call print
Derived() : Base() { }
};
int main() {
Base B;
Derived D;
return 0;
}
输出为:
Base
Base
但我希望输出是:
Base
Derived
这是不可能的。您可以在这篇文章中看到解释。
该对象是从上构造的。首先构造基类,然后派生类的成员扩展/重写基类。因此,当基构造函数运行时,派生类的成员尚不存在,因此无法调用它们。
不确定你需要这样做做什么,但你可以从派生类再次调用相同的方法,你应该看到两个调用的输出(从基和从派生(。