所以我们有一些类(即Button)及其采用void函数的方法。 我们还有父类State,它具有用于asign的静态方法buttonAction 到Button实例。问题是State的子类必须有一个覆盖选项 static方法buttonAction和此方法必须由父类State构造函数分配给按钮。
它必须是这样的:
代码:
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;
}
答案 0 :(得分:0)
让MyState的构造函数覆盖它:
MyState::MyState()
{
button.setAction(&buttonAction)l
}
在超类最初调用setAction()
以将回调指向其自己的静态类函数之后,这将覆盖它,并将其重新指向MyState
的静态类函数。