Switching Rendering modes....

My basic question is what is the most effective/efficient way of handling different drawing portions of a program that isn’t necessarily linear. What I mean is, most demo programs I see basically revolve around one environment, but what about different states of the program; specifically how do you go from say a main menu to the actual game. I know technically (in GLUT)you just switch the display callback (and probably keyboard callbacks as well). I am wondering how to keep everything object oriented and refrain from using global variables.

For example let’s say I have classes for handling the main menu and another for drawing the game stuff, is this the right approach? Or should I have just one main class that handles everything? What is the best way to make transitions from 1 state in the app to another and vice versa?

I know this question is a bit abstract, but any insight or links to examples would be greatly appreciated. Also sorry for rambling