这里有一个非常类似的问题。C++: 覆盖一个被另一个方法调用的保护方法。
但是,我想知道如何在Base类中重写一个回调函数,使另一个方法可以从构造函数中调用派生类的回调,而不是Base类的回调。
我在下面给出了一个例子。
#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
这是不可能的。你可以在下面看到解释 此职位.
对象是由基类向上构造的。基类首先被构造,然后派生类的成员扩展覆盖基类。所以当基类构造函数运行时,派生类的成员还不存在,所以你不能调用它们。
不知道你需要这个干什么,但是你可以从派生类中再次调用相同的方法,你应该可以看到两次调用的输出(从基类和派生类)。