所以我们有一些类(即 Button)及其采用 void 函数的方法。 我们还有父类 State,它有用于分配的静态方法 buttonAction 到 Button 实例。问题是 State 的子类必须有一个选项来覆盖 静态方法buttonAction 并且该方法必须由父类State 构造函数分配给button。
它必须像这样工作:
代码:
MyState st;
button.click();
期望的输出:
MyState::buttonAction!
但我得到的是:
State::buttonAction!
相关.cpp文件:
#include <iostream>
#include <cstdio>
class Button
{
public:
void setAction(void(*foo)(void));
void click();
private:
void(*foo)(void);
};
void Button::setAction(void(*foo)(void)) { this->foo = foo; }
void Button::click() { this->foo(); }
Button button;
class State
{
public:
State();
private:
static void buttonAction();
};
State::State()
{
button.setAction(this->buttonAction); // pointer to state's buttonAction
}
void State::buttonAction()
{
printf("State::buttonAction!");
};
class MyState : State
{
private:
static void buttonAction(); // overridden buttonAction
};
void MyState::buttonAction()
{
printf("MyState::buttonAction!");
};
int main() {
MyState st;
button.click();
return 0;
}
最佳答案
让 MyState 的构造函数覆盖它:
MyState::MyState()
{
button.setAction(&buttonAction)l
}
父类(super class)初始调用setAction()
将回调指向它自己的静态类函数后,这将覆盖它,并将它重新指向MyState
的静态类功能。
关于c++ - 如何从父类构造函数中引用重写的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39182893/