그래서 우리는 어떤 클래스 (즉, Button)와 void 함수를 취하는 메서드를 가지고 있습니다. 또한 Button 인스턴스에 서명하는 데 사용되는 정적 메서드 buttonAction이있는 부모 클래스 State가 있습니다. 문제는 State의 자식 클래스에 정적 메서드 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;
}
MyState의 생성자가 재정의하도록합니다.
MyState::MyState()
{
button.setAction(&buttonAction)l
}
수퍼 클래스가 처음 setAction()
에 콜백을 호출 하여 자체 정적 클래스 함수를 가리키면이를 재정의하고의 정적 클래스 함수를 다시 가리 킵니다 MyState
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다