class S0 : public S {
public:
    // Конструктор
    S0(MainData *pMainData) :S(pMainData) {
    }
    // Метод, реализующий действия для состояния
    virtual S* execute(){
        pMainData->e0();
        if(/* Проверка входных переменных для первой дуги */) {
            // Выполнение выходных воздействий
            zN(); ... zM();
            // Возвращаем новое состояние I
            return pMainData->pSI; 
        } else if ...
    }
};