Я пытаюсь сделать какой-то странный полиморфизм на C ++:
У меня есть два дерева классов:
Состояние <- Stage <- Stage_1, Stage_2, Stage_3 </p>
Action <- ActionState <- ActionState_Clear, ActionState_Begin, ActionState _ [...] </p>
Я хочу определить некоторые методы в Stage_1, которые получают Action в качестве параметра:
State
{
virtual void exec_action(Action *tAct)
{
std:cout << "NOT IMPLEMENTED" << endl;
};
}
Stage_1
{
virtual void exec_action(ActionStage_Clear *tAct)
{
std::cout << "ACTION STAGE CLEAR" << endl;
}
virtual void exec_action(ActionStage_Begin *tAct)
{
std::cout << "ACTION STAGE BEGIN" << endl;
}
}
Action *pAct = new ActionStage_Clear();
State* pSta = new Stage_1();
**pSta->exec_action(pAct);**
Я бы хотел, чтобы на экране появилось сообщение «ДЕЙСТВИЕ СТАДИИ ДЕЙСТВИЯ», но на нем показано «НЕ РЕАЛИЗОВАНО».Это - я думаю - потому что нет никакой реализации exec_action (Action *) (хотя есть некоторые для его классов сына).
РЕДАКТИРОВАТЬ: я покажу вам небольшую часть диаграммы:У меня есть этап (ы) и действие (я).У меня будет ptr для Stage_1, 2 .. и ptr для Action_1, 2 ... Я хочу позвонить Stage_n-> exec_action (Action_n) , и это должно выполнить код сына: Action_1:: exec_action (Действие_1).(если он не реализован, он должен вызвать Action :: exec_action (Action)).
Вопрос
Как это исправить?Есть ли другой способ заставить его работать?
Спасибо, прости мой английский.