I've built a class-based Push-down Automaton Finite State Machine. The context class (the class whose internal state is being modified) has some methods that only the states should access (incrementing/decrementing some iterators, pushing/popping states, setting an accepting state, etc). Right now they are public due to the different states needing access to them.
Would it be better to make the methods protected/private and define the states as friends of the context?
(nb4 "opinion-based!")