Then in run i would have:
[source lang="cpp"] void Application::run(int gameBool,std::string &amp;amp;Setting){ while(gameBool){ switch(Setting){ case "MainMenu": loadMainMenu result(); //this would be a class that sets sprites instead of doing so in "init()" } window.clear(); result.updateTo(window); //this will have window.draw() for all the sprites in the class window.display(); }[/source]

Am i on the right lines to how games are best programmed? Or is there some neat trick I'm missing.

Secondly, don’t use switch cases to manage such a large web of possible states. There are many patterns for this, one of which I have documented here: General Game/Engine Structure.

A simple switch over a game state enumeration is the easiest ways of implementing a simple game. Your state system, while a better fit for larger projects, is probably unnecessary here. The OP is still working out how to get simpler classes to work, let alone a more complex polymorphic solution.

Your initialisation code should not be invoking a "run" method, this is quite surprising. Also, passing an integer and treating it as a boolean, even if you include this hint in the name, is confusing. A better approach: